gcc有很多编译选项,要想一个一个看完,工程比较浩大,而且估计看完了也记不住,只能遇到一个记一个吧!
(1)-fno-builtin:
今天遇到一个问题,就是在定义函数的时候和C语言的内建函数重名了,导致编译的时候报错了:
warning: conflicting types for built-in function
平时一般都是想改改函数名不就得了,可突然冒出一个想法,能不能不改了,于是乎就发现了-fno-builtin这个选项。它的含义即不使用C语言的内建函数,用法如下:
#gcc a.c -o a.out -fno-builtin
忽然又冒出了一个想法,要是我有的函数想用内建函数,有的不想用,那该怎么办了? 于是乎我又发现了一个编译选项:-fno-builtin-function(其中function为要冲突的函数名),用法和上面的方法一致。
(2)-llibrary 或 -l library:
这个编译选项,应该是见得比较多的。它表明当进行编译链接的时候,链接库名为library的库进行编译。实际上是在编译的时候搜索名字为liblibrary.a的文件进行链接处理,它的搜索路径包括系统中的标准搜索路径(/lib和/usr/lib和/usr/local/lib等)和使用-L选项指定的路径。
(3)-LDir:
这个参数常常和-l选项一起出现,它表示将Dir作为-l链接的搜索路径加入到-l的库的搜索列表中。 它的搜索顺序位于标准库之后。
(4)-IDir:
这个参数和-LDir的功能相似,它也表示将Dir作为-l链接的搜索路径加入到-l的搜索路径列表中。它的搜索顺序位于标准库之前。
(5)-static:
gcc的链接库可以分为动态库(.so)和静态库(.a)。静态库和动态库的区别在于静态库在编译目标文件的时候会编译到目标文件内部,而动态库则作为一个外部库在运行的时候被调用。那么怎么使用这些库呢?
在进行链接的时候,如果搜索路径目录中存在同名的静态库和动态库,则在默认情况下,在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库。当然也可以使用参数来指定静态库的链接:
-static:使用静态库的形式进行链接。
(6)-share:
这个选项被用来创建动态库文件,如gcc -shared a.c -o a.so.