java - 安装定制的共享库文件/或其任何替代方案

标签 java c++ linux shared-libraries

我有一个应用程序(适用于 CentOs),它使用两个自定义共享库“libMyInit.so”(与 libMyInit.so.1 和 libMyInit.so.1.0.1 链接)和 libMyUtil.so(与 libMyUtil.so.1 和 libMyUtil.so libMyUtil.so.1.0.1 链接)。它们存在于应用程序包装中,例如 MyApp/bin/libMyInit.so 和 MyApp/bin/util/libMyUtil.so 及其各自的链接库。 当我必须运行该应用程序时,我必须明确地将上述路径添加到 LD_LIBRARY_PATH 中,否则它会给出如下错误: 错误:无法加载 native MyUtil 库。原因:java.library.path中没有MyUtil

有什么方法可以避免手动将库添加到 LD_LIBRARY_PATH 吗? 我可以在共享库的编译时或稍后执行一些操作,以便在 java.library.path 中找到定制的 .so 库?

最佳答案

恕我直言,做到这一点的最佳方法是在类的静态部分使用自定义的System.loadLibrary。看看我的 Java portaudio 绑定(bind) here@github ,尤其是在 LoadLibraryJPA 类中。

LoadLibrary 类根据操作系统类型和体系结构选择一个 native 库,将库从其 JAR 解压到临时文件夹中并从那里加载。

JPA 现在只需调用 LoadLibrary.load,一切都会在所有受支持的操作系统上自动运行,并且您只需要一个 JAR 文件。

关于java - 安装定制的共享库文件/或其任何替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904900/

相关文章:

c++ - 在 C/C++ 程序中,系统(Windows、Linux 和 Mac OS X)如何调用 main() 函数?

c++ - Boost.Coroutine 和 Boost.Coroutine2 的区别

c - 为什么在 close(1), open ("/dev/stdout", O_WRONLY) 之前使用 dup(1) 会导致 "No such file"?

linux - 如何使用 sed 将 html 文档的正文和其他部分分开?

arrays - bash 中是否有一个 array_combine 函数,我可以在其中从两个函数创建一个关联数组?

java - 恢复展开/折叠的树节点状态

java - 无法使用 Log4j2 更改日志级别

c++ - 如何在CMake中建立其他文件夹

java -\uXXXX、\uuXXXX 和\uuuXXXX 之间的区别

java - 如何将NetBeans项目从具有Maven的Java转换为纯Java?