【问题标题】:-Djava.library.path not linking .so library-Djava.library.path 未链接 .so 库
【发布时间】:2016-11-02 11:21:44
【问题描述】:

在执行.jar 应用程序时,我需要链接一个特定的库。 我修改了变量LD_LIBRARY_PATH 并添加(作为第一个目录)包含所需库的文件夹的路径。我也尝试使用选项-Djava.library.path="path_to_.so" 执行应用程序,但结果相同。

具体来说,我得到的结果是:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /.../application/lib64/libshmlib.so: 
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /.../another_application/lib64/libshmlib.so)

除了前面提到的还有其他加载库的选项吗?

【问题讨论】:

  • 你需要一份libshmlib.so 的副本,该副本是在与你正在运行的版本具有相同或更旧版本的libc 的linux 版本上编译的。投诉通常是因为您使用的libc 版本比构建库时使用的libc 版本更旧,并且此错误是告诉您旧的东西可能无法运行更新的东西。

标签: java linux shared-libraries static-libraries static-linking


【解决方案1】:

LD_PRELOAD='path/of/lib.so' ./program 基本上在执行给定程序时先加载给定库。所以如果你需要加载一个具体的库,这是最好的选择

【讨论】:

    【解决方案2】:

    如果“需要的库”是libshmlib.so,并且是你通过各种方式传递的路径,那么看起来确实找到了该库,但它需要错误版本的C库。例如,您的库可能针对libc.so 的较新版本进行编译,而不是您在此系统上的版本。如果您有libshmlib.so 的源代码,请尝试在您的系统上重新编译它。如果没有,请尝试为您的操作系统版本获取合适的libshmlib.so 版本。或者您可能希望将这些未解决的依赖项的路径添加到LD_LIBRARY_PATH,但libc.so 可能不是这种情况,因为尝试替换libc.so 似乎是个坏主意。

    【讨论】:

      【解决方案3】:

      我的解决方案是下载 libshmlib.so 要求的库,然后使用 LD_PRELOAD='path/of/downloaded/lib.so' 执行程序。它现在可以正常工作了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        • 2020-08-17
        • 2014-10-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-07
        • 1970-01-01
        相关资源
        最近更新 更多