Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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
使用静态C++;Eclipse for Java中的库 我想在java程序中使用一个现有的C++ C++库。我读书。步骤(几乎)是一样的。不幸的是,如果我尝试使用以下内容加载库: static { System.loadLibrary("mylibrary"); }_Java_C++_Eclipse_Java Native Interface_Static Libraries - Fatal编程技术网

使用静态C++;Eclipse for Java中的库 我想在java程序中使用一个现有的C++ C++库。我读书。步骤(几乎)是一样的。不幸的是,如果我尝试使用以下内容加载库: static { System.loadLibrary("mylibrary"); }

使用静态C++;Eclipse for Java中的库 我想在java程序中使用一个现有的C++ C++库。我读书。步骤(几乎)是一样的。不幸的是,如果我尝试使用以下内容加载库: static { System.loadLibrary("mylibrary"); },java,c++,eclipse,java-native-interface,static-libraries,Java,C++,Eclipse,Java Native Interface,Static Libraries,我得到一个例外: Exception in thread "main" java.lang.UnsatisfiedLinkError: no mylibrary in java.library.path 我尝试在System.loadLibrary调用之前手动设置java.library.path,但没有帮助: System.setProperty("java.library.path", "/workspace/LibraryTest/lib/"); 在项目的运行配置中设置LD\u LIB

我得到一个例外:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no mylibrary in java.library.path
我尝试在
System.loadLibrary
调用之前手动设置java.library.path,但没有帮助:

System.setProperty("java.library.path", "/workspace/LibraryTest/lib/");
在项目的运行配置中设置
LD\u LIBRARY\u PATH
,也无法解决此问题。我也犯了同样的错误。不过,对于共享库,它工作得很好。目前我正在Debian Jessie上的Eclipse Mars中使用Oracle Java8。库是否需要使用
JNI\u OnLoad\u mylibrary
方法?有人经历过类似的问题吗

编辑


尝试了/usr/lib目录并添加了
JNI\u OnLoad\u mylibrary
。没有成功。

也许您的代码无法重新定位?这似乎会打乱JVM。用
-fPIC
重新编译,看看会发生什么


从对另一个问题的回答来看,您需要在二进制文件中定义
JNI\u OnLoad\u name-of-your-library
,才能工作。C++名字是否毁了你的一天?您可能需要
extern“C”
该函数,以便JVM能够找到它。

这一点以前已经得到了回答,这里的回答相当好:这是我在问题中已经链接的帖子。我知道这是可能的,但它不起作用。也许我遗漏了什么?我更新了库并为JNI_OnLoad_mylibrary(卸载)方法添加了extern关键字。还使用-fPIC编译了库。编译时没有错误。如果我从C++调用它,这个库运行良好。但Eclipse仍然告诉我“java.library.path中没有mylibrary”。可以肯定的是,如果静态库文件名为libmylibrary,那么将方法命名为JNI_OnLoad_mylibrary就足够了。a?我可以在最后的评论中回答这个问题:是的,将方法命名为JNI_OnLoad_mylibrary就够了。至少这是JNI文档所说的。然而,主要的问题是找不到静态库。您可以将静态库编译成一个共享库并使用它:除此之外,我几乎没有任何想法。你所做的应该有用。也许你为错误的拱门编译了库?咬错了?使用了你没有的处理器扩展吗?目前我正在从静态库创建一个共享库。很遗憾,我没有时间检查所有可能的问题。。。我想我将来会更详细地研究这个问题。如果我找到了解决方案,我会把它贴在这里。对不起,我帮不了你什么忙。JNI对一大堆不同的事情非常挑剔,当事情出错时,它通常不会给出好的错误。你经常会陷入“检查所有东西!”