当JavaCpp创建JNI库/linux-x86_64/libjnimynativelib.so时,它在哪里查找本机库libmynativelib.so
使用如下的@Platform注释告诉JavaCpp有关C++头和共享库的信息:
@Platform(include={"MyLibraryHeader.h"}, link = "mynativelib")
@Namespace("mynamespace")
public class MyLibrary {
...
}然后通过JavaCpp编译并运行上面的Java类,如下所示:
javac -cp javacpp.jar MyLibrary.java
java -jar javacpp.jar -cp ../.. # classpath is parent of com/mypackage dir然后JavaCpp输出:
Generating /<projpath>/jniMyLibrary.cpp
Compiling /<projpath>/linux-x86_64/libjniMyLibrary.so
g++ -I/usr/lib/jvm/java-7-openjdk-amd64/include -I/usr/lib/jvm/java-7-openjdk-amd64/include/linux <path>/jniMyLibrary.cpp -Wl,-rpath,$ORIGIN/ -march=x86-64 -m64 -Wall -O3 -fPIC -shared -s -o /<projpath>/linux-x86_64/libjnimynativelibrary.so -lmynativelib这就产生了这个错误:
/usr/bin/ld: cannot find -lmynativelibg++在当前目录()或linux-x86_64子目录中都找不到libmynativelib.so。
LD_LIBRARY_PATH=<projdir>帮不上忙。
告诉JavaCpp加载哪个本机库的推荐方式是什么?
发布于 2015-02-04 10:23:15
@Platform(link=)注释已经为JavaCpp指定了要链接到的本机库:
@Platform(include="MyLibraryHeader.h", link="mynativelib")因此,剩下的工作就是告诉g++在哪里可以找到库libmynativelib.so。这是通过将-L参数通过JavaCpp Xcompiler指令发送到g++来完成的:
java -jar javacpp.jar -cp ... Xcompiler -L<libdir>https://stackoverflow.com/questions/28268561
复制相似问题