我正在尝试在JAVA中创建一个可以通过LINUX中的消息队列与现有C ++应用程序通信的应用程序。 我曾尝试使用SWIG进行JNI,但似乎SWIG不支持C ++,因为C它工作正常但是对于C ++来说,它会抛出一些错误,在网上分析显示它无法用于C ++。
factorial.cpp
#include "factorial.h"
int fact(int n) {
if(n == 0) return 1;
return n * fact(n-1);
}
factorial.h
extern "C" {
int fact(int n);
}
factorial.i
%module factorial
%{
#include "factorial.h"
%}
int fact(int n);
Main.java
public class Main {
static
{
System.loadLibrary("factorial");
}
public static void main(String[] args) {
int result = factorial.fact(5);
System.out.println(result);
}
}
然后生成.java文件的命令是 1:swig -c ++ -java factorial.i
然后编译factorial.cpp和factorial_wrap.cxx文件的命令是:
1:g ++ -c -fpic factorial.cpp
2:g ++ -c -fpic factorial_wrap.cxx -I /usr/java/jdk1.8.0_25/include -I /usr/java/jdk1.8.0_25/include/linux
然后命令制作libfactorial.so
1:ld -G factorial.o factorial_wrap.o -o libfactorial.so
然后编译Main.java:
1:javac Main.java
2:java Main
然后我面临这个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: factorialJNI.fact(I)I
at factorialJNI.fact(Native Method)
at factorial.fact(factorial.java:12)
at Main.main(Main.java:10)
其他任何可能的解决方案? 提前致谢