使用JNA / JNI通过Message Queue进行Java和C ++通信

时间:2015-10-13 09:45:42

标签: java-native-interface

我正在尝试在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)

其他任何可能的解决方案? 提前致谢

0 个答案:

没有答案