关于网友提出的“ Linux用jna 调用so动态库 报错 Error looking up function”问题疑问,本网通过在网上对“ Linux用jna 调用so动态库 报错 Error looking up function”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: Linux用jna 调用so动态库 报错 Error looking up function
描述: 我在服务器上调用 别的同事 用c++写的so库,采用jna调用
Java 代码如下
import com.sun.jna.Library;
import com.sun.jna.Native;
public class TestSo {
public interface LgetLib extends Library {
LgetLib INSTANCE = (LgetLib) Native.loadLibrary("helloword", LgetLib.class);
String print();
}
public String print() {
return LgetLib.INSTANCE.print();
}
}
c++源码
#include
#include
std::string print()
{
std::string res;
res= "hello word";
return res;
}
调用后老是报错
java.lang.UnsatisfiedLinkError: Error looking up function 'print': /usr/lib64/libhelloword.so: undefined symbol: print
com.sun.jna.Function.(Function.java:129)
com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:250)
com.sun.jna.Library$Handler.invoke(Library.java:191)
com.sun.proxy.$Proxy41.print(Unknown Source)
com.hshbic.aiTools.controller.device.TestSo.print(TestSo.java:15)
com.hshbic.aiTools.controller.device.DeviceController.queryModuleTypes(DeviceController.java:25)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
求解,是不是so库编译问题?
解决方案1:linux的so我不是很熟啊,但在windows上,dll是要声明export的,而且类型最好用char*
以上介绍了“ Linux用jna 调用so动态库 报错 Error looking up function”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3503570.html