ubuntu - 我的 .so 如何在不同的 Ubuntu 版本中找到其依赖的 .so?

标签 ubuntu java-native-interface shared-libraries compatibility gtk

我有一个 libA.so。它被 JNI 方法使用。

我有两个不同版本的 Ubuntu。一个是 Ubuntu 8.04,另一个是 Ubuntu 9.10。

libA.so 有一个依赖项。 libA.so 依赖于 libB.so,而 libB.so 依赖于 libC.so。

ie. libA.so -> libB.so -> libC.so (Actually libB.so and libC.so are related with GTK)



libA.so 在 Ubuntu 8.04 中编译。 JNI 方法在 Ubuntu 9.10 中运行良好。 (很奇怪)

但它有时在 Ubuntu 8.04 中不起作用。它返回“ undefined symbol GTK_SET_BULA”错误。

所以我用readelf -a libC.so检查了它我可以找到这个符号。

我使用 ldd libA.so 进行了检查和 ldd libB.so .链接信息也很好。

我对这个问题有任何想法。请让我知道您的出色意见。谢谢。

最佳答案

提供有关您的问题的更多信息:

  • undefined symbol 的确切名称
  • 库 A、B、C 的确切名称,
  • 您正在调用的 JNI 方法的确切名称,
  • 关于应用程序运行的几句话。

  • 解决此类问题的常见建议是在 LSB Navigator 中搜索有关遗漏符号的信息。 .

    顺便提一句
    使用 -Wa 选项而不是 -a 来读取 ELF 文件,以避免破坏输出行(分成 80 列):
    readelf -Wa libC.so
    

    关于ubuntu - 我的 .so 如何在不同的 Ubuntu 版本中找到其依赖的 .so?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255095/

    相关文章:

    ubuntu - 谷歌应用引擎 : Connection Refused Error

    ubuntu - 如何将 1920x1200 分辨率添加到 Ubuntu 20.04

    java - "Not enough storage is avaliable to process this command"

    java - 将 ".so"库添加到我的 android studio 项目中

    java - 如何将 C++ 类连接到 Java?

    python - 为什么 Python 运行 C++ 函数比 C++ 通过其 main() 函数运行自己的函数更快?

    c - 如何合并共享库?

    c - 如何在不使用 LD_LIBRARY_PATH 的情况下链接 makefile 中共享库的特定版本?

    node.js - 如何在nodejs中创建ip别名

    eclipse - 从 Egit eclipse 提交失败