在Windows中使用swig从Java调用c ++函数,得到java.lang.UnsatisfiedLinkErro
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)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
感谢您的评论。
相关文章:
- 为什么我在使用void函数时得到错误代码C2276
- 当使用我在一个函数、另一个函数中修改的数组时,在我的输出中得到一个奇怪的负数
- 为什么我在 Windows API 中得到对 TextOut() 函数的未定义引用?
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 当我从头文件和实现文件调用我的函数到我的主文件时,我没有得到任何输出
- 我在运行函数 GetVolumeInformation() 时得到非常随机的结果
- 尝试声明函数的局部变量,但得到范围错误
- 为什么我没有得到来自OnClicked函数的响应
- 创建一个移动分配函数,不断得到"pointer being freed was not allocated"
- 对于我的类函数,我得到双重释放或损坏错误
- 如果它被定义为 C++ 类中的成员函数,我得到了"non-standard syntax; use '&' to create a pointer to member"
- 当将对象传递给具有参数作为引用类型的函数以及当其类对象类型时,会得到不同的输出
- 为什么我在C++线程函数调用中得到重复值?
- 在删除函数自由度的指针后,为什么我会得到核心转储
- "vector<string>"作为函数参数传递,我得到一个错误
- 为什么当从递归函数返回字符串到C 中的Main时,我会得到分割错误
- 采用“std::string”的显式构造函数得到“char*”,工作正常
- pthread_create的参数在C++中使用过——每次线程函数得到的值都是一样的,为什么
- c++构造函数得到xtree错误
- C++pow函数得到了一个奇怪的结果