Linux解决库编译及库依赖问题的方法和常用工具


在Linux系统中,处理库编译及依赖问题是开发和系统维护中常见的任务。下面是几种常用的方法和工具来解决这些问题:

系统库设置

1.添加动态库路径
Linux使用LD_LIBRARY_PATH环境变量来查找动态库。你可以将你的库路径添加到这个变量中

# 运行应用程序之前,确保在同一终端中设置此环境变量。 
# 临时生效    
export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH

# 长久生效  
nano ~/.bashrc
# 结尾追加
export LD_LIBRARY_PATH="/path/to/your/library:$LD_LIBRARY_PATH"
# 立即生效 
source ~/.bashrc   

常用工具

update-alternatives

如果出现库版本冲突,可以使用 update-alternatives 工具来管理多个版本的库或工具。

sudo update-alternatives --config <package>

## 更新GCC版本  
## 安装gcc14  
sudo apt install gcc-14 g++-14  

## 设置gcc14为默认编译器  
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 60

ldd

ldd(List Dynamic Dependencies)是一个用于查看可执行文件或共享库(.so 文件)依赖的其他库的命令行工具。它显示了程序在运行时需要加载的所有动态库的路径。

常用用法如下:

# -v(--verbose): 提供详细的依赖信息。
# -u(--unused): 显示未使用的直接依赖。
# -d(--data-relocs): 执行重新定位和报告丢失的重定位。
# -r(--function-relocs): 像 -d 选项一样执行,但还报告函数地址的重定位错误。
ldd [options] <executable or library> 

nm

nm(Name Mangler) 是用来列出对象文件、可执行文件或共享库中的符号表条目的工具。它可以帮助开发者理解一个程序中定义和引用的符号。


# -C(--demangle): 解析(demangle)复杂的符号名称,通常用于 C++ 程序。
# -D(--dynamic): 显示动态符号而不是普通的符号。常用于共享库。
# -g(--extern-only): 仅显示外部符号。
# -n(--numeric-sort): 按地址排序符号。
# -p(--no-sort): 不对符号进行排序。
# -u(--undefined-only): 仅显示未定义的符号。  
nm [options] <file>  

# 使用 nm 工具查看动态库中的符号是否存在和被正确标记为导出   
nm -D /path/to/your/library/libmyqtlib.so | grep SymbolName

lddtree

lddtree 是一个脚本,用于显示一个程序的库依赖树.

lddtree <binary>  

objdump

objdump是一个程序,用于显示各种信息,包括二进制文件的汇编代码、符号表、重定位信息等。这对于分析编译器如何翻译程序或库非常有用。

# -d: 反汇编代码段
# -h: 显示各节(section)的头信息
# -t: 显示符号表  
# -x: 显示所有可用头信息  
# -s: 全输出,包括所有节的内容   
objdump [options] <file>

readelf

readelf是用于显示 ELF 格式文件(如在 Linux 上的可执行文件和库)的详细信息的工具。

# -h:显示 ELF 文件头。
# -l:显示程序头表(通常描述段如何映射到内存)。
# -s:显示符号表。
# -S:显示节头表。
readelf [options] <elf-file>

strace

strace 是一个强大的调试工具,用于跟踪程序执行时的系统调用和所接收的信号。

# -f:跟踪子进程。
# -e trace=<syscall>:只跟踪指定的系统调用。
# -o <file>:输出到文件。
strace [options] [command]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值