一:软件包介绍:
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内置连接器脚本