【问题标题】:How can my .so find its dependent .so in different Ubuntu version?我的 .so 如何在不同的 Ubuntu 版本中找到其依赖的 .so?
【发布时间】:2010-07-15 11:30:27
【问题描述】:

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

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

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

即。 libA.so -> libB.so -> libC.so(其实libB.so和libC.so和GTK有关)

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

但它有时在 Ubuntu 8.04 中不起作用。它返回“未定义符号 GTK_SET_BULA”错误。

所以我使用readelf -a libC.so 进行了检查,我可以找到该符号。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 未定义符号的确切名称
    2. 库 A、B、C 的确切名称
    3. 您正在调用的 JNI 方法的确切名称,
    4. 关于正在运行的应用程序的几句话。

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

    顺便说一句
    使用 -Wa 选项而不是 -a 来读取 ELF 文件,以避免输出行中断(分成 80 列):

    readelf -Wa libC.so
    

    【讨论】:

    • 感谢您的回复。这已间接解决,因此尚未完全解决。推测可能是 libc (GNU C Library) 版本不同造成的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2018-07-27
    • 2017-11-30
    相关资源
    最近更新 更多