在Windows中使用swig从Java调用c ++函数,得到java.lang.UnsatisfiedLinkErro

calling c++ function from Java using swig in Windows, getting java.lang.UnsatisfiedLinkError

本文关键字:函数 得到 java UnsatisfiedLinkErro lang 调用 Windows swig Java      更新时间:2023-10-16

我有这个 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(&ltime);
return ctime(&ltime);
}          

我有这个 .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)Javajdk1.8.0_31include" -I "C:Program Files (x86)Javajdk1.8.0_31includewin32"
g++ -shared example.o example_wrap.o -o example.dll -I "C:Program Files (x86)Javajdk1.8.0_31include" -I "C:Program Files (x86)Javajdk1.8.0_31includewin32"

这将创建一个 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

感谢您的评论。

相关文章: