`
lveyo
  • 浏览: 910864 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux下编译C程序(三)

阅读更多
gcc在命令行上经常使用的几个选项是:
-c   只预处理、编译和汇编源程序,不进行连接。编译器对每一个源程序产生一个目标文件。

-o file  确定输出文件为file。如果没有用-o选项,缺省的可执行文件的输出是a.out,目标文件和汇编文件的输出对source.suffix分别是source.o和source.s,预处理的C源程序的输出是标准输出stdout。

-Dmacro或-Dmacro=defn   其作用类似于源程序里的#define。例如:% gcc -c -DHAVE_GDBM -DHELP_FILE=\"help\" cdict.c其中第一个- D选项定义宏HAVE_GDBM,在程序里可以用#ifdef去检查它是否被设置。第二个-D选项将宏HELP_FILE定义为字符串“help”(由于反斜线的作用,引号实际上已成为该宏定义的一部分),这对于控制程序打开哪个文件是很有用的。

-Umacro   某些宏是被编译程序自动定义的。这些宏通常可以指定在其中进行编译的计算机系统类型的符号,用户可以在编译某程序时加上 -v选项以查看gcc缺省定义了哪些宏。如果用户想取消其中某个宏定义,用-Umacro选项,这相当于把#undef macro放在要编译的源文件的开头。

-Idir   将dir目录加到搜寻头文件的目录列表中去,并优先于在gcc缺省的搜索目录。在有多个-I选项的情况下,按命令行上-I选项的前后顺序搜索。dir可使用相对路径,如-I../inc等。

-O   对程序编译进行优化,编译程序试图减少被编译程序的长度和执行时间,但其编译速度比不做优化慢,而且要求较多的内存。

-O2   允许比-O更好的优化,编译速度较慢,但结果程序的执行速度较快。

-g   产生一张用于调试和排错的扩展符号表。-g选项使程序可以用GNU的调试程序GDB进行调试。优化和调试通常不兼容,同时使用-g和-O(-O2)选项经常会使程序产生奇怪的运行结果。所以不要同时使用-g和-O(-O2)选项。

-fpic或-fPIC   产生位置无关的目标代码,可用于构造共享函数库。

以上是gcc的编译选项。gcc的命令行上还可以使用连接选项。事实上,gcc将所有不能识别的选项传递给连接程序ld。连接程序ld将几个目标文件和库程序组合成一个可执行文件,它要解决对外部变量、外部过程、库程序等的引用。但我们永远不必要显式地调用ld。利用gcc命令去连接各个文件是很简单的,即使在命令行里没有列出库程序,gcc也能保证某些库程序以正确的次序出现。

gcc的常用连接选项有下列几个:
-Ldir   将dir目录加到搜寻-l选项指定的函数库文件的目录列表中去,并优先于gcc缺省的搜索目录。在有多个-L选项的情况下,按命令行上-L选项的前后顺序搜索。dir可使用相对路径。如-L../lib等。

-lname   在连接时使用函数库libname.a,连接程序在-Ldir选项指定的目录下和/lib,/usr/lib目录下寻找该库文件。在没有使用-static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态连接。

-static   禁止与共享函数库连接。

-shared   尽量与共享函数库连接。

这是Linux上连接程序的缺省选项。下面是一个使用gcc进行连接的例子:
引用
% gcc -o prog main.o subr.o -L../lib -lany -lm
1
1
分享到:
评论

相关推荐

    在Linux下编译并运行C程序

    在Linux下编译并运行C/C++程序的流程,包括环境设定,编译命令,makefile编写等

    LINUX下多个c程序编译链接的程序

    LINUX下多个c程序编译链接的程序,经验证可以执行,并搭配了MAKEFILE文件

    linux下GCC编译C程序

    当时Richard Stallman(GNU项目的创办人)想要创建一个编译器,它可以满足他定义的“自由软件”概念,并可用来编译GNU项目发布的其他软件。GNU C编译器迅速在自由软件社区中流行开来,而且以其健壮性和可移植性而...

    如何在Linux下用gcc编译c程序

    Linux 内核和许多其他自由软件以及开放源码应用程序都是用 C 语言编写并使用 GCC 编译的。

    在deepin深度系统中编译C语言程序

    在deepin 中编译c语言程序,用到vim的基本操作,例如:i切换到可以插入的模式,退出和保存的命令是: :wq,Linux的基本操作,例如:sudo apt-get install build-essential 用来安装build-essential,build-essential...

    Linux系统中如何编译C程序

    主要是Linux系统中如何编译C程序,实现对linux内核的掌控与增加系统调用。

    linux中如何编译C程序

    linux中如何编译C程序,希望能够帮助各位在迷茫中寻找光明的同仁。

    Linux下编译C程序的过程

    学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识。 /*test.c 了解C程序的编译*/ #include int main(void) { printf(Hello World!\n); return 0; } 对于test.c,...

    LINUX下编译与调试

    LINUX下编译与调试 LINUX下编译与调试 1 1. gcc/g++编译器 1 2. makefile使用 2 2.1. 基本过程处理 2 2.2. 特殊处理与伪目标 3 2.3. 变量、函数与规则 5 3. 程序调试 8 3.1. gdb常用命令 8 3.2. gdb 应用举例 9 3.3...

    grpc-1.30.2 Linux 编译静动态库

    在 centos 7 下使用 gcc 4.8.5 + cmake 3.16.9 编译,包含 bin, include, lib, lib64, share 五个目录,可以直接在 linux C++ 程序中引用。 因为 grpc 编译比较麻烦,且依赖项较多,故而分享一下编译后的版本,本人...

    嵌入式Linux下C语言编程应用程序开发详解【完整篇】 2

    注:总共12章,详细介绍了嵌入式Linux下的C语言编程应用,内含多种源代码,建议Linux下C语言编程的初学者下载,分享了……

    Linux下c语言模块条件编译模板源码

    在Linux系统下Makefile和C/C++语言都有提供条件选择编译的语法,就是在编译源码的时候,可以选择性地编译指定的代码。这种条件选择编译的使用场合有好多,例如我们开发一个兼容标准版本与定制版本兼容的项目,那么,...

    linux下C语言编写的摄像头显示视频(可arm编译使用)

    linux下C语言编写的摄像头显示视频,可在开发板(arm编译)使用,不过像素差了点,可修改参数来改变画质。

    LINUX 下C语言使用、编译与调试实...

    LINUX 下C语言使用、编译与调试 1、用 vi 编写一个简单的、显示"Hello,World!"的 C 程序,用 cc 编译并观察编译后的结果 2、利用 cc 调试该程序 3、运行生成的可执行文件。

    linux操作系统下C语言编程入门 gcc编译

    linux操作系统下C语言编程入门 gcc编译 gdb调试技术 实例演示

    使用VC可以编译通过的Linux(详细中文注释)

    编译出来的Linux可以正常运行,包含所有linux的功能,总之,和在linux下编译的是一摸一样的linux! 由于可以使用VC的集成环境编译,所以可以让工程编译生成VC特有的.BSC源代码浏览文件,可以非常方便的使用集成开发...

    基于C语言和linux编译的的手机程序

    在linux上编写编译完成 的模拟安卓程序的代码,C语言编写,完成图片浏览和照相 摄像功能 其他功能留有接口 可自行加入 具体说明在readme中

    在Linux下编译C或C++程序的教程

    从开始学习C/C++我们都在是windows下,那么如何(怎样)在linux中编译C/C++代码?在linux终端下(命令行中)编译译C/C++代码? 在任何linux分支下编译C/C++代码,如 Ubuntu ,Red Hat, Fedora ,Debian 以及其他linux分支...

    Linux下的简单C程序gcc编译、gdb调试。

    Linux下的简单C程序gcc编译、gdb调试。

    Linux系统中如何编译C程序PPT.ppt

    Linux系统中如何编译C程序PPT.ppt

Global site tag (gtag.js) - Google Analytics