有个奇怪的现象,
我要调用 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());
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.