Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将共享库正确加载到Eclipse中_Java_Linux_Eclipse_Java Native Interface_Shared Libraries - Fatal编程技术网

Java 如何将共享库正确加载到Eclipse中

Java 如何将共享库正确加载到Eclipse中,java,linux,eclipse,java-native-interface,shared-libraries,Java,Linux,Eclipse,Java Native Interface,Shared Libraries,我在linux上使用JNI,检索共享库时遇到问题 特别是,我使用单个SO文件中包含的本机函数,但它与其他SO文件(我将其放在同一目录中)有依赖关系 现在,我使用System.load(absolutePath)加载主SO,但我得到以下错误: ...GMApiJNI64.so: libgpc64.so: cannot open shared object file: No such file or directory 其中GMApiJNI64.so是我正在使用的主库 直到现在,我一直试图: 将

我在linux上使用JNI,检索共享库时遇到问题

特别是,我使用单个SO文件中包含的本机函数,但它与其他SO文件(我将其放在同一目录中)有依赖关系

现在,我使用
System.load(absolutePath)
加载主SO,但我得到以下错误:

...GMApiJNI64.so: libgpc64.so: cannot open shared object file: No such file or directory
其中
GMApiJNI64.so
是我正在使用的主库

直到现在,我一直试图:

  • 将LD_LIBRARY_路径设置为包含.so文件的文件夹

  • -Djava.library.path
    属性设置到eclipse.ini文件中

  • 执行此处指定的操作:


我还能做些什么?

简单回顾一下。我不知道你确切的环境。但我可以复制并修复与您类似的问题:

> git clone https://github.com/mkowsiak/jnicookbook.git
> cd jnicookbook/recipes/recipeNo023
> make
> make test
/usr/lib64/jvm/java/bin/java -Djava.library.path=:./lib -cp target recipeNo023.HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/test/workspace/jnicookbook/recipes/recipeNo023/lib/libHelloWorld.so: libAnotherFunction.so: cannot open shared object file: No such file or directory
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at recipeNo023.HelloWorld.<clinit>(HelloWorld.java:11)
Makefile:14: recipe for target 'test' failed
make: *** [test] Error 1
它不在那里。我们可以做的是将它添加到LD_LIBRARY_路径上

test@linux-875l:~/workspace/jnicookbook/recipes/recipeNo023> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/lib
然后再试一次。工作

test@linux-875l:~/workspace/jnicookbook/recipes/recipeNo023> make test/usr/lib64/jvm/java/bin/java -Djava.library.path=:/home/test/workspace/jnicookbook/recipes/recipeNo023/lib:./lib -cp target recipeNo023.HelloWorld
library: :/home/test/workspace/jnicookbook/recipes/recipeNo023/lib:./lib
Hello world!
Hello from another function!
在Eclipse中,您可以做的是在项目设置中提供LIB的位置:

Project -> Properties -> Java Build Path 
    -> Libraries -> JRE System Library 
    -> Native library location -> Edit... 
    -> External folder
更新:

如果在LD_LIBRARY_PATH上没有libgpc64.so,则仍然可能存在问题

还有一件事你可以试试

在构建GMAapiJNI64.so时,请尝试使用以下命令:

-Wl,-rpath=$LOCATION_OF_LIBGPC -lgpc64

这一次,Eclipse应该能够正确启动您的代码,即使您的库不在LD_LIBRARY_PATH中

这可能有助于您似乎无法首先工作您是否有Eclipse项目?是的,我有。。。另外,在另一个项目中,我尝试在使用您发出信号的答案中建议的内容后打印出
System.getProperty(“java.library.path”)
,它实际上显示了我的路径。无论如何,我无法加载我需要的库。你检查过它在那里吗?也许在详细模式下运行jvm,看看是否会弹出提示。甚至检查是否可以从工作目录访问目录?
test@linux-875l:~/workspace/jnicookbook/recipes/recipeNo023> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/lib