是否可以获取共享库的版本?

bst*_*r55 5 c++ linux android adb

我正在尝试查找软件行中的错误。我有两个发布版本2.0.962和2.0.966。这些版本之间的唯一区别是lib.so文件。为了弄清楚从哪里开始在lib.so的源代码树中查找,我需要知道每个发行版中的版本号。

有用于打印共享对象版本的命令行工具吗?

Sre*_*kar 5

我从未做过原生 Android 编程,但由于 Android 使用 Linux 内核,因此使用的可执行格式很可能是“ELF”。就ELF而言,文件中没有存储共享对象的版本信息。因此,除非文件名本身是类似的内容"libXXX.VERSION.so",否则没有其他方法可以找出共享对象的版本号。这种技术一般在Linux中使用。

我对解决您的问题的建议是:

  1. 如果可能的话使用修改日期来区分共享对象
  2. 使用 dlopen() 或类似方法打开共享对象并尝试查看正在导出的函数。

来源: http: //man7.org/linux/man-pages/man5/elf.5.html 注意:可执行文件中的E_VERSION是ELF格式的版本,而不是可执行文件的版本。

  • SO 的版本通常采用 ELF 格式,作为 SONAME 的一部分:`readelf -a lib.so | grep SONAME`。当您在构建时链接到库时,SONAME 就是放入可执行文件中的内容(作为 NEEDED 部分),并且链接器如何找到要在运行时链接的正确 SO 版本。也就是说,没有强制的命名/版本控制,并且不同的库使用不同的约定,因此这取决于您在创建版本时使用的工具和选项,以及是否包含版本以及粒度(只是主要或主要)及未成年人等) (3认同)