我在Ubuntu的Tomcat7上托管Java Web应用程序。
我有一个主要的共享.so库,它依赖于本机库。主库已加载,但在尝试加载它的本机库时出现错误。基本上,主库是本机库周围的JNI包装器。
lib_mynative_lib.so: cannot open shared object file: No such file or directory.
主库和本机库都位于同一位置。这可能是什么问题?是不是可以从库中加载库?我必须为Tomcat声明一些其他隐藏的PATH定义吗?第一个图书馆被拿起,但没有第二个。
编辑:
考虑到这一点,Tomcat需要知道主库的位置是合乎逻辑的,因此我在/usr/share/tomcat7/bin/setenv.sh
中将其指定为
export CATALINA_OPTS="-Djava.library.path=/home/me/my_shared_lib"
这适用于主库。
现在,对于本机库,我将以下内容添加到同一个setenv.sh
export JAVA_OPTS=$JAVA_OPTS "-Djava.library.path=/home/me/my_shared_lib"
但没有变化。
更多信息:
第一个(主)库使用System.loadLibrary("lib_mymainlib.so")
从Java加载,而第二个库使用dlopen("lib_mynative_lib.so", 1)
加载到C ++代码中。