Linux gcc 常用编译参数

  • 本篇文章主要记录常用GCC编译参数

最近发了个 linux 下的so库给客户,客户写 Demo 时候用的命令行编译,由于之前都是用 Makefile 或者 CMake ,指导客户时候差点出糗,所以记录一下常用的编译参数方便快速排查编译命令问题。

-L : 表示要链接的库所在的目录。-L. 表示要链接的库在当前目录, -L/usr/lib 表示要连接的库在/usr/lib 下。目录在/usr/lib 时,系统会自动搜索这个目录,可以不用指明。

-l (小写L): 表示需要链接库的名称,注意不是库文件名称,比如库文件为 libtest.so,那么库名称为 test。

-include : 包含头文件,这个很少用,因为一般情况下在源码中,都有指定头文件。

-I (i 的大写): 指定头文件的所在的目录,可以使用相对路径。

-shared : 指定生成动态链接库。

-fPIC: 表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码共享的目的。

-pie: Position-Independent-Executable fPIE 选项仅能在编译可执行码时用,不能用于编译库。所以,如果想要 PIE 的程序,需要你除了在 gcc 增加-fPIE 选项外,还需要在 ld 时增加-pie 选项才能产生这种代码。即 gcc -fpie -pie 来编译程序。

-fPIE: 是为可执行文件产生位置无关代码, -fPIC 是为共享库产生位置无关代码。

-lxxxx: 添加链接库xxxx。

-g: 增加调试信息。

-o: 制定目标名称,缺省的时候,gcc 编译出来的文件是 a.out。

-w: 不生成任何警告信息。

-Wall: 生成所有警告信息。

-D: name Predefine name as a macro, with definition 1。

-DDEBUG: 定义宏,默认值为 1,-DMACRO=A 相当于程序中使用#define MACRO A 这只是一个编绎参数,在连接时没有意义。

本次GCC参数先记录到这儿,后面随时整理补充,我是大石斑,下期文章见! 如果本文对老哥你有帮助,欢迎关注公众号支持一波!感谢!

公众号二维码
公众号二维码

posted @ 2020-12-20 23:57  大石斑Grouper  阅读(278)  评论(0)    收藏  举报