前言
经常使用静态库和动态库的接口,有时候可以查看是否包含了哪些函数等,或可以查看某一库的依赖是否链接,是否包含。
1. 查看某个目标文件(.so/.a/.out)是否包含某个接口函数
nm -Au bar.a(foo.so/foo.out) |grep "function"
-A 每行或显示全路径名称或显示对象库名
-u 未定义符号
function 需要查看的符号(函数,全局变量等)
2. 查看某个动态库依赖的链接
linux-vdso.so.1 (0x0000007f8e252000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f8d9a7000)
/lib/ld-linux-aarch64.so.1 (0x0000007f8e226000)
3. 查看某个可执行文件是否已链接到对应的库
linux-vdso.so.1 (0x0000007f88054000)
libmem_manager.so => not found
libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007f87f12000)
libstdc++.so.6 => /usr/lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007f87d7e000)
libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007f87d5a000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f87c01000)
/lib/ld-linux-aarch64.so.1 (0x0000007f88028000)
libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007f87b48000)
libmem_manager.so
库未指定链接, 说明没有讲库的路径加载到环境变量, 在shell中执行如下即可
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:“libmem_manager.so所在的绝对目录”