gcc 编译选项介绍

文章目录

  • 宏定义
  • 选项
    • -Wl,-Bstatic &-Wl,-Bdynamic

宏定义

定义 说明
_GNU_SOURCE glibc 默认不自动支持GNU扩展,一般加上该选项,避免编译问题

_GNU_SOURCE:

 glibc does not make the GNU extensions available automatically. If a program depends on GNU 
 extensions or some other non-standard functionality, it is necessary to compile it with the C 
 compiler option -D_GNU_SOURCE, or better, to put `#define _GNU_SOURCE' at the beginning 
 of your source files, before any C library header files are included. This difference normally 
 manifests itself in the form of missing prototypes and/or data type definitions. Thus, if you get  	   such errors, the first thing you should do is try defining _GNU_SOURCE and see if that makes the 
 problem go away. 

选项

-Wl,-Bstatic &-Wl,-Bdynamic

默认情况下,GCC/G++链接时优先链接动态库,如果没有动态库,则链接相应的静态库。同时,GCC/G++也提供了链接选项 -Wl,-Bstatic 和 -Wl,-Bdynamic 供用户指定链接动态库或者静态库。

-Wl,-Bstatic指示跟在后面的-lxxx选项链接的都是静态库
-Wl,-Bdynamic指示跟在后面的-lxxx选项链接的都是动态库。

        g++ -L. -o main main.cc -Wl,-Bstatic -ltest -Wl,-Bdynamic

前面的 -Wl,-Bstatic指示链接libtest.a静态库,后面的 -Wl,-Bdynamic指示链接系统动态库。

选项 说明
-shared 产生共享对象
-static 使用静态链接,默认是动态链接
-e xx 指定xx 为程序的入口函数
-fpic 产生地址无关代码,较小且较快,但某些平台会有限制符号数量和代码长度,
-fPIC 产生地址无关代码,没有限制。一般用这个
-no-builtin GCC编译器提供了很多内置函数(Built-in function),会把常用的C库函数替换成编译的内置函数,以优化功能,这个选项就是关闭内置函数功能,不要被其优化

你可能感兴趣的:(编译与链接)