【发布时间】:2016-05-11 14:22:06
【问题描述】:
我有一个我想使用的库。我没有它的源代码,但它包含我想使用的功能。它是一个普通的 x86-64 共享对象,其中包含一些 JNI 代码,没有什么特别之处。我现在的问题是库引用了libm.so。现在发生的事情很奇怪,我没想到。当我尝试运行它时,它告诉我 libm.so 有一个无效的 ELF 标头,这是有道理的,因为 libm.so 只是 libm.so.6 的参考文件,它是实际的库文件。
现在我的问题是如何纠正?我真的很惊讶操作系统没有正确处理这个问题,因为每个程序都会引用libm.so 而不是libm.so.6,因为它至少应该在某种程度上独立于版本。
编辑:我做了一个strace 和libm.so 似乎只是冰山一角...我的库引用了许多常见的Linux 标准库。而且由于我在 JRE 中执行它,它只在 JRE 的目录中搜索,这当然是完全错误的。而且由于该库是从 Android 应用程序中获取的,因此原始 makefile 可能具有库的路径,这些路径也没有任何意义……必须对这个问题进行更多分析才能解决。
【问题讨论】:
-
作为实际文件的符号链接的库与任何其他符号链接一样工作。一定有其他问题导致错误。至于错误,您能否复制粘贴完整且未经编辑的实际错误,并将其显示在问题正文中?也许还显示用于链接的命令行(链接失败?或者尝试运行程序时失败?)。
标签: linux shared-libraries elf