-Djava.library.path没有链接.so库

时间:2016-11-02 11:21:45

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

我需要在执行.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)

除了前面提到的还有其他选择吗?

3 个答案:

答案 0 :(得分:2)

在执行给定程序时,

LD_PRELOAD='path/of/lib.so' ./program基本上在任何其他库之前加载给定库。因此,如果您需要加载具体的库,这是最佳选择

答案 1 :(得分:0)

如果&#34;所需的库&#34;是libshmlib.so并且它是以各种方式传递的路径,然后似乎实际找到了库,但它需要错误版本的C库。例如,您的库可能会针对较新版本的libc.so进行编译,而不是您在此系统上的版本。如果您拥有libshmlib.so的来源,请尝试在您的系统上重新编译它。如果您不这样做,请尝试为您的操作系统版本获取合适的libshmlib.so版本。或者您可能希望将这些未解决的依赖项的路径添加到LD_LIBRARY_PATH,但libc.so可能不是这种情况,因为尝试替换libc.so似乎是一个坏主意。< / p>

答案 2 :(得分:0)

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