У меня есть две библиотеки, одна с объектами Ada и одна с объектами C ++ (у меня нет большого контроля над тем, куда и куда)
Ада ссылается на С и наоборот ...
Этот символ находится в libIPCAda.so: ipc_manager_shutdown_c
Этот символ находится в libIPCC.so: stream_buffer_header_size
Когда я делаю эти JNA Calls:
CLibrary INSTANCE8 = (CLibrary)
Native.loadLibrary("IPCAda", // <<< our library goes here
CLibrary.class);
CLibrary INSTANCE9 = (CLibrary)
Native.loadLibrary("IPCC", // <<< our library goes here
CLibrary.class);
Я получаю это:
ld.so.1: java: fatal: relocation error: file <<my directory>>/lib/libIPCAda.so: symbol stream_buffer_header_size: referenced symbol not found
Когда я делаю эти звонки JNA:
CLibrary INSTANCE9 = (CLibrary)
Native.loadLibrary("IPCC", // <<< our library goes here
CLibrary.class);
CLibrary INSTANCE8 = (CLibrary)
Native.loadLibrary("IPCAda", // <<< our library goes here
CLibrary.class);
Я получаю это:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'IPCC': ld.so.1: java: fatal: relocation error: file <<my directory>>/lib/libIPCC.so: symbol ipc_manager_shutdown_c: referenced symbol not found
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
at com.sun.jna.Library$Handler.<init>(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:379)
at com.sun.jna.Native.loadLibrary(Native.java:364)
at Test2$CLibrary.<clinit>(Test2.java:55)
at Test2.main(Test2.java:74)
Очевидно, что не нравятся взаимозависимые символы ... Есть ли способ заставить это работать в JNA?
* РЕДАКТИРОВАТЬ Пример Компиляции *
gcc -c -fPIC -g -O0 -fstack-check -pipe -gnatE -gnatU -gnatwl -gnatf -gnatE -gnat05 -lIPCC -I- -gnatA <<my directory>>src/ndds_c.adb