【发布时间】:2021-08-26 04:03:54
【问题描述】:
我尝试调用这个最小的 C 代码(文件TEST.c):
void Java_TEST_run() {}
从这个Java代码(文件Example.java):
public class Example {
public static void main(String args[]) {
System.out.println("START");
TEST test = new TEST();
test.dll_call();
System.out.println("ALL DONE!");
}
}
class TEST {
public void dll_call() {
run();
}
static {
try {
System.out.println("Load DLL = start ");
System.load("/home/user/Desktop/TEST.dll");
System.out.println("Load DLL = finish ");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n");
System.exit(1);
}
}
public native void run();
}
我通过以下方式创建一个库:
gcc -c TEST.c
g++ -shared -o TEST.dll TEST.o
如果我使用 GCC 编译(甚至使用 G++ 创建 lib!)一切正常,但如果我使用 G++ (g++ -c TEST.c) 编译,我在运行 Java 示例时收到以下错误输出:
START
Load DLL = start
Load DLL = finish
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'void TEST.run()'
at TEST.run(Native Method)
at TEST.dll_call(Example.java:21)
at Example.main(Example.java:9)
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/questions/172587/…