JavaCpp:如何指定 native 库?

标签 java java-native-interface g++ shared-libraries javacpp

JavaCpp在哪里寻找原生库libmynativelib.so当它创建 jni 库时,/linux-x86_64/libjnimynativelib.so

使用@Platform向JavaCpp告知C++头文件和共享库。像这样的注释:

@Platform(include={"MyLibraryHeader.h"}, link = "mynativelib")
@Namespace("mynamespace")
public class MyLibrary {
  ...
}

上面的 Java 类然后通过 JavaCpp 进行编译和运行,如下所示:

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

g++ 未找到 libmynativelib.so在当前目录 () 或 linux-x86_64 子目录中。

LD_LIBRARY_PATH=<projdir>没有帮助。

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

最佳答案

@Platform(link=) 注释已指定 JavaCpp 要链接到的 native 库:

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

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

java -jar javacpp.jar -cp ... Xcompiler -L<libdir>

关于JavaCpp:如何指定 native 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268561/

相关文章:

c++ - 模板化友元声明在 g++ 5.4.0 下不起作用——编译器错误或错误代码?

c++ - 在 Linux 上构建静态 C++ 库 - 我需要链接到其他库吗?

c++ - 使用 std::fstream 会导致程序在 PASE for i (7.3) 中以 SIGILL 结束

java - 如何增加JavaFX中ScrollPane的滚动效果?

java - 为什么ArrayList流不报告CONCURRENT特征?

opencv - 图像显示 VS2010 中的结果,但未显示使用 OpenCV 在 Android 中的输出

android - 什么是 JNI 图形或如何使用它?

android - 在 Android 上调试 Opus 崩溃

java - GridBag Layout 如何将组件向北推

java - 创建新对象与在函数内设置其变量