Linux交叉编译工具链toolchain bin文件作用 gcc g++ ld ar as nm strip objdump、lib库路径、include头文件路径
前言全局说明
交叉编译工具链toolchain bin文件作用 gcc g++ ld ar as nm strip objdump
一、说明
二、bin 文件功能
arm-xxxx-linux-gcc # GNU的C语言编译器
arm-xxxx-linux-g++ # GNU的C++语言编译器
arm-xxxx-linux-cpp # GNU的C的预编译器
arm-xxxx-linux-gcov # gcc 的辅助测试工具,用来分析和优化程序
arm-xxxx-linux-addr2line # 将你要找的地址转成文件和行号,它要使用 debug 信息
arm-xxxx-linux-ar # 产生、修改和解开一个存档文件
arm-xxxx-linux-as #(汇编器): 将汇编语言代码转换为目标文件。它将 GNU C 编译器 gcc 输出汇编语言源文件转换为目标文件的工具。\
# 它将汇编代码翻译成机器码,生成目标文件,供后续链接器 ld 链接使用。
arm-xxxx-linux-asv # GNU的汇编器
arm-xxxx-linux-c++filt # C++ 和 Java 中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标,c++filt 就是实现这种反向的转化,根据标号得到函数名
arm-xxxx-linux-gprof # GNU汇编器预编译器
arm-xxxx-linux-gfortran # Fortran 编译器
arm-xxxx-linux-ld # GNU的连接器
arm-xxxx-linux-nm # 列出目标文件的符号和对应的地址
arm-xxxx-linux-objcopy # 将某种格式的目标文件转化成另外格式的目标文件
arm-xxxx-linux-objdump # 显示目标文件的信息
arm-xxxx-linux-ranlib # 为一个存档文件产生一个索引,并将这个索引存入存档文件中
arm-xxxx-linux-readelf # 显示 elf 格式的目标文件的信息
arm-xxxx-linux-size # 显示目标文件各个节的大小和目标文件的大小
arm-xxxx-linux-strings # 打印出目标文件中可以打印的字符串,有个默认的长度,为4
arm-xxxx-linux-strip # 剥掉目标文件的所有的符号信息
三、环境变量
3.1 include .h头文件指定
export CINCS="${CINCS} /toolchain/include"
export CCINCS="${CCINCS} /toolchain/include"
export CXXINCS="${CCINCS}"
export CPPINCS="${CCINCS}"
export C_INCLUDE_PATH=$C_INCLUDE_PATH:<头文件路径> #C语言
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:<头文件路径> #C++
3.2 lib库 so 路径指定
export CCLIBS="${CCLIBS} /toolchain/lib"
export CXXLIBS="${CCLIBS}"
export CPPLIBS="${CCLIBS}"
3.3 LDFLAGS 链接文件 so 路径指定
export LDFLAGS="-L/toolchain/lib -L/toolchain/lib2 -Wl,-rpath-link-Wl=/work/crossbuild/X/lib"
注意:多个路径用空格分割,不要用冒号
3.4 LD_LIBRARY_PATH 指定程序编译期间动态库搜索路径
export LD_LIBRARY_PATH="/toolchain/lib:${LD_LIBRARY_PATH}"
当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔。
不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运行,所以多用在调试。
3.5 -rpath 程序运行时查找so文件路径
export CXX="${CXX} -Wl,-rpath=/toolchain/lib"
3.6 --rpath-link 搜索依赖库
export CXX="${CXX} -Wl,-rpath-link=/toolchain/lib"
3.7 -I 指定头文件路径
include_file_PATH="/toolchain/include"
export CC="${CC} -I${include_file_PATH}"
3.8 -L 查找指定目录里so文件
参考 3.3 使用方法
3.9 -march 指定CPU平台
target_host="arm-openwrt-linux"
export CC="${target_host}-gcc -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard -DQL=1 "
3.10 LD_LIBRARY_PATH 和 LIBRARY_PATH
即LD_LIBRARY和LIBRARY的去区别。
LD_LIBRARY_PATH是运行加载,
LIBRARY_PATH是编译加载.
bin运行我们设置环境变量应该设置的为LD_LIBRARY。
3.2
四、其他
4.1
-L #指定连接时库的搜索路径
-l #来显示指定,比如"-labc"表示的库文件为libabc.so
-rpath-link #比"-L"多一项功能,它指定的目录还可以用于搜索依赖库。
-rpath 比 -rpath-link #多一项功能,它指定的目录会被编译进程序中,当程序运行时,首先从这些目录中寻找库。
-I #指定头文件路径
4.2
文件名:
免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。
参考、来源:
https://blog.csdn.net/cs_sword2000/article/details/99313127
https://blog.csdn.net/hhd1988/article/details/123443735
https://blog.csdn.net/bryanwang_3099/article/details/131234424
https://www.cnblogs.com/circlelll/p/18087254
https://blog.csdn.net/u010429831/article/details/103150893 (3.1)
https://blog.csdn.net/lxp90/article/details/45058415 (3.10)
https://blog.csdn.net/weixin_48859611/article/details/113986310 (3.4 3.10)
浙公网安备 33010602011771号