我有一个应用程序(适用于 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 ,尤其是在 LoadLibrary
和 JPA
类中。
LoadLibrary
类根据操作系统类型和体系结构选择一个 native 库,将库从其 JAR 解压到临时文件夹中并从那里加载。
JPA
现在只需调用 LoadLibrary.load
,一切都会在所有受支持的操作系统上自动运行,并且您只需要一个 JAR 文件。
关于java - 安装定制的共享库文件/或其任何替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904900/