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"
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)



posted @ 2024-07-31 17:48  悟透  阅读(292)  评论(0)    收藏  举报