有个奇怪的现象,
我要调用 c 里边的 add(),不知道是调用方法不对,还是怎么的。两种语言调用均提示函数找不到undefined symbol
如下代码。(函数是在libso.so中,libso.so依赖于libso1.so 、libso2.so)
但是!! 但是!!!
我命令行执行: nm -D libso.so
显示的函数名是这种:_ZN11add4InERKSs
我用这个看似乱码的函数名_ZN11add4InERKSs调用,居然调用成功了!!!而且用这个函数名 java 跟 python 均能调用成功,这是什么原因???求解释
import com.sun.jna.Library;
import com.sun.jna.Native;
public class Java_call_c {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)Native.loadLibrary("so1",CLibrary.class);
CLibrary INSTANCE1 = (CLibrary)Native.loadLibrary("so2",CLibrary.class);
CLibrary INSTANCE2 = (CLibrary)Native.loadLibrary("so",CLibrary.class);
int add();
}
public static void main(String[] args) {
System.out.println(CLibrary.INSTANCE2.add());
}
}