Linux 查看g++ 默认include路径: g++ -print-prog-name=cc1plus -v

gcc官网:https://gcc.gnu.org/

gcc/g++的编译参数,这里只介绍 -L 、-l、-include、-I、-shared、-fPIC

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

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

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

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

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

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

GCC/G++编译选项 GCC拥有一百多个编译选项。对于C语言和C++语言,G++与GCC的编译选项基本相同。常用的一些编译选项如下: 编译选项 说明

  • -c 只进行预处理、编译和汇编,生成.o文件
  • -S 只进行预处理和编译,生成.s文件
  • -E 只进行预处理,产生预处理后的结果到标准输出
  • -C 预处理时不删除注释信息,常与-E同时使用
  • -o 指定目标名称,常与-c、-S同时使用,默认是.out
  • -include file 插入一个文件,功能等同源代码中的#include
  • -Dmacro[=defval] 定义一个宏,功能等同源代码中的#define macro[defval]
  • -Umaacro 取消一个宏,功能等同源代码中的#undefine macro
  • -Idir 优先在选项后的目录中查找包含的头文件
  • -Iname 链接后缀为.out的动态链接库来编译程序
  • -Ldir 指定编译搜索库的路径
  • -g 编译器编译时加入debug信息
  • -pg 编译器编译时加入信息给gprof
  • -share 使用动态库
  • -static 禁止使用动态库

读elf格式的命令    objdump readelf