0%

编译链接总结

一:软件包介绍:

glibc : libc, ld.so, ldd, ldconfig 等

binutils : ar, as, ld ,nm, objcopy, objdump, readelf, size, strip

gcc : c++, cc, cpp, libgcc, libstdc++, gcc, gccbug, gcc 相关

二:gcc 头文件搜索目录

gcc –print-prog-name = cc1 cc1plus

c 头文件目录:’gcc –print-prog-name=cc1’ -v !!!!注意:不是单引号,是 tab 按键上面的按键

c++头文件目录:’gcc –print-prog-name=cpp’ -v

寻找策略:

1:从-I 开始

2:从环境变量 C_INCLUDE_PATH 等

3:内定目录(使用-nostdinc 关闭默认路径)

二:连接器搜索库目录:ld –verbose | grep SEARCH

寻找策略:

1:从-L 开始

2:环境变量 LIBRARY_PATH

3:内定目录(使用-nostdlib 关闭默认库)

三:gcc 预处理器 cpp 的内置宏:gcc -posix -E -dM - </dev/null 或者 cpp -dM < /dev/null

注意:不包含LINE这些。

四:运行时动态链接库查找目录

1:编译时指定

2:LD_LIBRARY_PATH

3:/etc/ld.so.conf 指定

4:默认动态库查找路径/lib, /usr/lib…..

五:gcc 环境变量

C_INCLUDE_PATH:c 程序查找头文件

CPATH:c/c++/obj-c 头文件查找

CPLUS_INCLUDE_PATH:c++头文件查找

LIBRARY_PATH:连接器 ld 查找库文件

LANG:字符集

LD_LIBRARY_PATH:运行时查找动态库

六:ld 标准连接器设置入口地址方法

1:ld 命令行-e 选项

2:链接脚本 ENTRY()命令

3:如定义 start 符号,使用 start

4:存在 text section 使用 text section

5:使用 0 值

ld –vervose 内置连接器脚本