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 @   悟透  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2023-07-31 git branch 分支信息显示
2023-07-31 git show 提交详细信息【汇总参数演示】
点击右上角即可分享
微信分享提示