本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
作为程序员,编程能力很重要,但编译能力更重要,编程能力能通过书籍、教程提升,它是一个设计能力,而编译能力却很少有专门的书籍来普及知识。尤其是,编译过程报错通常是不可预计的问题,特别是跟动态库、链接相关的错误,编译错误基本能告诉你在哪一行那一句出了什么样的问题,但链接问题总是让人摸不着头脑。
掌握一些库的查看、查找方法,对提升编译能力有很好的作用。也能在编译问题解决中有神奇作用。
Linux
快速查找机器上的库
ldconfig -p | grep <lib_name>
ldconfig -p
会打印出当前系统已经安装的动态库信息,然后使用grep找你的lib即可
查看库是否存在
pkg-config --exists <lib_name> && echo $?
如果返回 0,则库存在;否则,库不存在(或者说,未被 pkg-config 识别)。
查看库的依赖
readelf -d <lib_name>
该命令查看库依赖哪些库,但不能查看它依赖的库存放在机器的什么位置
ldd <lib_name>
该命令能看到库依赖的那些库的具体路径及名称
pkg-config --libs <lib_name>
能看到当你引用该库时应该添加的编译选项是什么
查看 Android 库的依赖
使用位于 ndk 目录下的工具,例如
~/Android/ndk/android-ndk-r19c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf -d <lib_name>
也可以直接使用 readelf 命令。
查看库的版本
使用 readelf 命令
readelf -h <lib_name>
该命令将输出一些结果,其中
Class: ELF64
Class: ELF32
标识了库运行的机器位数;
Machine
标识了库运行的机器,Linux 为 Advanced Micro Devices x86-64
,32 位 Android 为 ARM
,64 位 Android 为 AArch64
使用 pkg-config 命令
pkg-config --modversion <lib_name>
可以打印当前库的版本
Windows
查看库的依赖
可以直接使用 readelf 命令
readelf -d <lib_name>
查看库的版本
可以直接使用 readelf 命令
readelf -h <lib_name>