linux c编程之动态库搜索路径和动态库的调试
2023-12-21 17:42:44
动态库的搜索路径:
方法一:(1)
把xxx.so 放到/usr/lib或lib中
方法二:(2) 通过设置环境变量方法 绝对路径
export LD_LIBRARY_PATH= xxx : $LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxxx
方法三:(3)
在/etc/ld.so.conf文件中加入我们生成库的目录
vim 打开/etc/ld.so.conf,然后在下面加入一行路径代码
然后通过/sbin/ldconfig xxx 读取
ldconfig /etc/ld.so.conf
ldconfig -v
动态库的调试:
(1)查看动态库的平台架构是否正确
file xxxx
file /lib/aarch64-linux-gnu/libjpeg.so.62.3.0
/lib/aarch64-linux-gnu/libjpeg.so.62.3.0: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
(2)查看应用程序或者库的组成
ldd xxx
显示glibc 版本
ldd --version
ldd 2.35
ldd /lib/aarch64-linux-gnu/libjpeg.so.62.3.0
linux-vdso.so.1 (0x0000007fb4800000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fb45b0000)
/lib/ld-linux-aarch64.so.1 (0x0000007fb47c7000)
ldd jpeg
linux-vdso.so.1 (0x0000007f82928000)
libjpeg.so.62 => /lib/aarch64-linux-gnu/libjpeg.so.62 (0x0000007f82860000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f826b0000)
/lib/ld-linux-aarch64.so.1 (0x0000007f828ef000)
(3)显示动态库查找过程
LD_DEBUG=libs ./jpeg
LD_DEBUG=libs ./jpeg
LD_DEBUG=help date
libs display library search paths
reloc display relocation processing
files display progress for input file
symbols display symbol table processing
bindings display information about symbol binding
versions display version dependencies
scopes display scope information
all all previous options combined
statistics display relocation statistics
unused determined unused DSOs
help display this help message and exit
LD_DEBUG=libs jpeg
LD_DEBUG=libs ./jpeg
LD_DEBUG=libs ./jpeg
2061: find library=libjpeg.so.62 [0]; searching
2061: search cache=/etc/ld.so.cache
2061: trying file=/lib/aarch64-linux-gnu/libjpeg.so.62
2061:
2061: find library=libc.so.6 [0]; searching
2061: search cache=/etc/ld.so.cache
2061: trying file=/lib/aarch64-linux-gnu/libc.so.6
2061:
2061:
2061: calling init: /lib/ld-linux-aarch64.so.1
2061:
2061:
2061: calling init: /lib/aarch64-linux-gnu/libc.so.6
2061:
2061:
2061: calling init: /lib/aarch64-linux-gnu/libjpeg.so.62
2061:
2061:
2061: initialize program: ./jpeg
2061:
2061:
2061: transferring control: ./jpeg
2061:
not jpg file./test.jpg
2061:
2061: calling fini: ./jpeg [0]
2061:
2061:
2061: calling fini: /lib/aarch64-linux-gnu/libjpeg.so.62 [0]
2061:
文章来源:https://blog.csdn.net/M_1308347688/article/details/135133711
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!