常用选项
选项 | 说明 |
---|---|
-I | 头文件所在路径 |
-c | 只做预处理 编译 汇编,得到二进制文件 |
-g | 编译时添加调试文件 |
-On | n=0~3 ,编译优化,n越大优化得越多 |
-Wall | 提示更多警告信息 |
-D<DEF> | 编译时定义宏,注意-D和DEF之间没有空格 |
-E | 生产预处理信息 |
宏定义
定义 | 说明 |
---|---|
_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库函数替换成编译的内置函数,以优化功能,这个选项就是关闭内置函数功能,不要被其优化 |