出于某种原因,我无法使用 JNA 来运行简单的 HelloWorld。一定是我想念的愚蠢的东西。对不起,如果这是一个愚蠢的问题,但我到处都看过但我无法让它工作。
在我的 Linux 机器上,我正在做:
$ java -version
java version "17.0.6" 2023-01-17 LTS
Java(TM) SE Runtime Environment (build 17.0.6+9-LTS-190)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.6+9-LTS-190, mixed mode, sharing)
$ cat /etc/issue
Ubuntu 22.04.2 LTS \n \l
HelloJNA.java
import com.sun.jna.Library;
import com.sun.jna.Native;
public class HelloJNA {
public interface Add extends Library
{
Add INSTANCE = Native.load("HelloJNA", Add.class);
void sayHello();
}
static public void main(String argv[]) {
Add lib = Add.INSTANCE;
lib.sayHello();
}
}
HelloJNA.cpp
#include <iostream>
using namespace std;
void sayHello() {
cout << "Hello from C++ (JNA)!" << endl;
}
javac -cp lib/jna-5.6.0.jar:. HelloJNA.java
g++ -std=c++11 -shared -fPIC HelloJNA.cpp -o libHelloJNA.so
java -cp lib/jna-5.6.0.jar:. HelloJNA
我得到:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'sayHello': /home/jorge/jna/libHelloJNA.so: undefined symbol: sayHello
at com.sun.jna.Function.<init>(Function.java:252)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:600)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:576)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:562)
at com.sun.jna.Library$Handler.invoke(Library.java:243)
at jdk.proxy1/jdk.proxy1.$Proxy0.sayHello(Unknown Source)
at HelloJNA.main(HelloJNA.java:13)