mai*_*rgs 7 c++ java java-native-interface shared-libraries 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);
Run Code Online (Sandbox Code Playgroud)
我明白了:
ld.so.1: java: fatal: relocation error: file <<my directory>>/lib/libIPCAda.so: symbol stream_buffer_header_size: referenced symbol not found
Run Code Online (Sandbox Code Playgroud)
当我做这些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);
Run Code Online (Sandbox Code Playgroud)
我明白了:
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)
Run Code Online (Sandbox Code Playgroud)
显然它不喜欢交叉依赖符号......有没有办法让这个工作在JNA?
*编辑示例编译*
gcc -c -fPIC -g -O0 -fstack-check -pipe -gnatE -gnatU -gnatwl -gnatf -gnatE -gnat05 -lIPCC -I- -gnatA <<my directory>>src/ndds_c.adb
Run Code Online (Sandbox Code Playgroud)
小智 6
交叉链接将发生在native-code-land中,而不是Java中.据JNA所知,它正在加载两个完全独立的本机库.
您需要将库自己提供给彼此的位置.有几种方法可以做到这一点; 在编译共享库时设置rpath,或在运行时设置LD_LIBRARY_PATH环境变量.
Rpath可以说是更好的方法,因为它特定于需要它的二进制文件,并且不会污染运行时环境.您可以使用以下编译器标志在gcc中设置它:
-Lpath-to-your-library -Wl,-rpath,path-to-your-library
| 归档时间: |
|
| 查看次数: |
3979 次 |
| 最近记录: |