Вот мой код:
Main.java:
Код: Выделить всё
import com.sun.jna.Structure;
import com.sun.jna.Native;
import com.sun.jna.Library;
import com.sun.jna.Structure.FieldOrder;
public class Main {
public interface MyCppLibrary extends Library {
MyCppLibrary INSTANCE = (MyCppLibrary) Native.load("mycpplib", MyCppLibrary.class);
@FieldOrder({"x", "y"})
class MyStruct extends Structure {
public int x;
public int y;
}
MyStruct getStruct();
}
public static void main(String[] args) {
MyCppLibrary lib = MyCppLibrary.INSTANCE;
MyCppLibrary.MyStruct myStruct = lib.getStruct();
System.out.println("x: " + myStruct.x);
System.out.println("y: " + myStruct.y);
}
}
Код: Выделить всё
#include
struct MyStruct {
int x;
double y;
};
extern "C" {
MyStruct* getStruct() {
return new MyStruct{10, 20.5};
}
}
Код: Выделить всё
g++ -v -shared -o libmycpplib.so my_struct.cpp
Код: Выделить всё
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'getStruct': /home/h3007/.vscode-server/data/User/workspaceStorage/af05c638282256cbf9a3f960fefbba02/redhat.java/jdt_ws/hassan-jna-struct_c38993c4/bin/libmycpplib.so: undefined symbol: getStruct
at com.sun.jna.Function.(Function.java:255)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:618)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:594)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:580)
at com.sun.jna.Library$Handler.invoke(Library.java:248)
at jdk.proxy1/jdk.proxy1.$Proxy0.getStruct(Unknown Source)
at Main.main(Main.java:21)
Подробнее здесь: https://stackoverflow.com/questions/791 ... -using-jna
Мобильная версия