Доступ к структуре C++ из Java с помощью JNAJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Доступ к структуре C++ из Java с помощью JNA

Сообщение Anonymous »

Я новичок в JNA и пытаюсь собрать минимальное доказательство концепции доступа к структурам из общей библиотеки C++. К сожалению, он не запускается, и я не могу в этом разобраться.
Вот мой код:
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);
}
}
MyStruct.cpp:

Код: Выделить всё

#include 

struct MyStruct {
int x;
double y;
};

extern "C" {
MyStruct* getStruct() {
return new MyStruct{10, 20.5};
}
}
Я компилирую код C++ в общую библиотеку (используя WSL2 Ubuntu 20.04):

Код: Выделить всё

g++ -v -shared -o libmycpplib.so my_struct.cpp
Но когда я запускаю класс Java (конечно, включая недавний JNA jar, jna-5.15.0.jar, в свой CLASSPATH), я получаю следующую ошибку:< /p>

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»