我有一个应用程序(用于CentOs),它使用两个自定义共享库“libMyInit.so”(与libMyInit.so.1和libMyInit.so.1.0.1链接)和libMyUtil.so(与libMyUtil.so链接) .1和libMyUtil.so libMyUtil.so.1.0.1)。它们存在于app包装内,如MyApp / bin / libMyInit.so& MyApp / bin / util / libMyUtil.so及其各自的链接库。
当我必须运行应用程序时,我必须明确地将上述路径添加到LD_LIBRARY_PATH,否则它会给出如下错误:
ERROR:Unable to load native MyUtil library. Reason: no MyUtil in java.library.path
。
有什么方法可以避免手动将库添加到LD_LIBRARY_PATH? 我可以在共享库的编译时或之后做的事情,以便在java.library.path中找到自定义的.so库吗?
答案 0 :(得分:0)
恕我直言,最好的方法是在类的静态部分使用自定义System.loadLibrary
。查看我的Java portaudio绑定here@github,尤其是LoadLibrary
和JPA
类。
LoadLibrary
类根据操作系统类型和体系结构选择本机库,将lib从其JAR解压缩到temp文件夹并从那里加载。
JPA
现在只需要调用LoadLibrary.load
,所有支持的操作系统都可以自动运行,只需要一个JAR文件。
答案 1 :(得分:0)
其中一种方法是将这些库复制到/ usr / lib,/ lib,/ usr / local / lib目录中。