2

JavaCpplibmynativelib.so在创建 jni 库时在哪里寻找本机库,/linux-x86_64/libjnimynativelib.so

JavaCpp 被告知 C++ 头文件和共享库,使用如下@Platform注解:

@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 -lmynativelib

libmynativelib.sog++在当前目录 () 或 linux-x86_64 子目录中都找不到。

LD_LIBRARY_PATH=<projdir>没有帮助。

告诉 JavaCpp 要加载哪个本机库的推荐方法是什么?

4

1 回答 1

1

@Platform(link=)注释已经指定了 JavaCpp 要链接到的本机库:

@Platform(include="MyLibraryHeader.h", link="mynativelib")

所以剩下的就是告诉 g++ 在哪里可以找到库libmynativelib.so。这是通过通过 JavaCppXcompiler指令向 g++ 发送 -L 参数来完成的:

java -jar javacpp.jar -cp ... Xcompiler -L<libdir>
于 2015-02-04T02:23:15.207 回答