GCC
简介
gcc
编译链接
编译选项
- -shared :指定生成动态链接库。
- -static :指定生成静态链接库。
- -fPIC :生成可用于共享库的位置独立代码。所有的内部寻址均通过全局偏移表完成。要确定一个地址,需要将代码自身的内存位置作为表中一项插入。该选项产生可以在共享库中存放并从中加载的目标模块。
- -L. :表示要连接的库所在的目录。
- -l:指定链接时需要的动态库。编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上
.a或.so
来确定库的名称。 - -Wall :生成所有警告信息。
- -ggdb :此选项将尽可能的生成gdb的可以使用的调试信息。
- -g :编译器在编译的时候产生调试信息。
- -c :只激活预处理、编译和汇编,也就是把程序做成目标文件(.o文件)。
- -Wl,options :把参数(options)传递给链接器ld。如果options中间有逗号,就将options分成多个选项,然后传递给链接程序。
--whole-archive/--no-whole-archive
--whole-archive 和 --no-whole-archive 是ld专有的命令行参数,gcc 并不认识,要通gcc传递到 ld,需要在他们前面加 -Wl;
默认情况下,对于未使用到的符号(函数是一种符号),链接器不会将它们链接进共享库和可执行程序。
这个时候,可以启用链接参数“--whole-archive”来告诉链接器,将后面库中所有符号都链接进来
参数“-no-whole-archive”则是重置,以避免后面库的所有符号被链接进来。
安装编译
- centos7 gcc 版本升级
|
|
动态链接
静态链接
- GCC在链接过程中,参数的解析是从右往左的,参数右侧的库会先于左侧的库加载;
|
|
- 查看gcc include顺序
|
|