-Djava.library.path 没有链接 .so 库
-Djava.library.path not linking .so library
我在执行 .jar
应用程序时需要 link 特定的库。
我修改了变量 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)
除了前面提到的之外,还有其他加载库的选项吗?
如果"the desired library"是libshmlib.so
,而且你通过各种方式传递的是它的路径,那么好像确实找到了这个库,但是需要错误版本的C库.例如,你的库可能是针对比你在这个系统上的版本更新的 libc.so
版本编译的。如果您有 libshmlib.so
的源代码,请尝试在您的系统上重新编译它。如果不这样做,请尝试为您的操作系统版本获取合适的 libshmlib.so
版本。或者您可能想将这些未解决的依赖项的路径添加到 LD_LIBRARY_PATH
,但对于 libc.so
可能不是这种情况,因为尝试替换 libc.so
似乎不是一个好主意。
我的解决方案是下载 libshmlib.so 要求的库,然后使用 LD_PRELOAD='path/of/downloaded/lib.so'
执行程序。它现在可以正常工作了。
LD_PRELOAD='path/of/lib.so' ./program
基本上在执行给定程序时首先加载给定的库。所以如果你需要加载一个具体的库是最好的选择
我在执行 .jar
应用程序时需要 link 特定的库。
我修改了变量 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)
除了前面提到的之外,还有其他加载库的选项吗?
如果"the desired library"是libshmlib.so
,而且你通过各种方式传递的是它的路径,那么好像确实找到了这个库,但是需要错误版本的C库.例如,你的库可能是针对比你在这个系统上的版本更新的 libc.so
版本编译的。如果您有 libshmlib.so
的源代码,请尝试在您的系统上重新编译它。如果不这样做,请尝试为您的操作系统版本获取合适的 libshmlib.so
版本。或者您可能想将这些未解决的依赖项的路径添加到 LD_LIBRARY_PATH
,但对于 libc.so
可能不是这种情况,因为尝试替换 libc.so
似乎不是一个好主意。
我的解决方案是下载 libshmlib.so 要求的库,然后使用 LD_PRELOAD='path/of/downloaded/lib.so'
执行程序。它现在可以正常工作了。
LD_PRELOAD='path/of/lib.so' ./program
基本上在执行给定程序时首先加载给定的库。所以如果你需要加载一个具体的库是最好的选择