JNA加载库
|
我有两个库,一个带有Ada对象,一个带有C ++对象(我对哪个地方没有太多控制权)
Ada资料引用了C资料,反之亦然。
此符号在libIPCAda.so中:ipc_manager_shutdown_c
该符号在libIPCC.so中:stream_buffer_header_size
当我执行这些JNA调用时:
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
没有找到相关结果
已邀请:
2 个回复
羔磺
催备南菠亨
您还提到了C ++。 Java JNI无法加载C ++损坏的符号。如果您可能强迫实现将其导出为C符号,则可以。在谈论本机实现时,请不要交换C和C ++。