【Build】Linux / Android 动态库常用操作方法 查找、查看依赖、版本,pkg-config 用法

395 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

作为程序员,编程能力很重要,但编译能力更重要,编程能力能通过书籍、教程提升,它是一个设计能力,而编译能力却很少有专门的书籍来普及知识。尤其是,编译过程报错通常是不可预计的问题,特别是跟动态库、链接相关的错误,编译错误基本能告诉你在哪一行那一句出了什么样的问题,但链接问题总是让人摸不着头脑。

掌握一些库的查看、查找方法,对提升编译能力有很好的作用。也能在编译问题解决中有神奇作用。

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>