![](/img/trans.png)
[英]why I'm getting java.lang.UnsatisfiedLinkError (when calling c function from java)?
[英]calling c++ function from Java using swig in Windows, getting java.lang.UnsatisfiedLinkError
我有这个C ++代码:
/* File : example.cpp */
#include <iostream>
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y) {
return (x%y);
}
char *get_time()
{
time_t ltime;
time(<ime);
return ctime(<ime);
}
我有这个.i代码:
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
我试图从Java内部调用这些函数。 因此,在Windows 7(与mingw)cmd中,我这样做:
swig -c++ -java example.i
g++ -c example.cpp example_wrap.cxx -I "C:\Program Files (x86)\Java\jdk1.8.0_31\include" -I "C:\Program Files (x86)\Java\jdk1.8.0_31\include\win32"
g++ -shared example.o example_wrap.o -o example.dll -I "C:\Program Files (x86)\Java\jdk1.8.0_31\include" -I "C:\Program Files (x86)\Java\jdk1.8.0_31\include\win32"
这将创建一个dll文件。 现在,我尝试运行以下Java程序:
public class main {
public static void main(String argv[]) {
System.loadLibrary("example");
System.out.println(example.fact(5));
System.out.println(example.get_time());
}
}
所以我跑
javac main.java
编译正常,但是当我使用
java main
我收到此错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: exampleJNI.fact(I)I
at exampleJNI.fact(Native Method)
at example.fact(example.java:20)
at main.main(main.java:4)
问题是什么?
使用解决的问题
-Wl,--kill-at
感谢您的评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.