我正在使用以下示例:https://github.com/caplin/jnijnaexamples/tree/master/jna
在mac 中,我可以按如下方式创建.dylib文件:
gcc -shared -fpic -o librandomjna.o randomjna.c
g ++ -dynamiclib -undefined suppress -flat_namespace * .o -o librandomjna.dylib
mkdir课程
javac -d classes -classpath jna-4.4.0.jar JavaNativeAccess.java
cd classes
export LD_LIBRARY_PATH =。
java -classpath jna-4.4.0.jar:。 com.enlightedinc.apps.where.utils.JavaNativeAccess
现在在Linux Box 中,我创建了.so文件,如下所示
gcc -shared -fpic -o librandomjna.o randomjna.c
gcc -shared -o librandomjna.so * .o
以同样的方式,在Linux mkdir类中生成新类
javac -d classes -classpath jna-4.4.0.jar JavaNativeAccess.java
cd classes
export LD_LIBRARY_PATH =。
java -classpath jna-4.4.0.jar:。 com.enlightedinc.apps.where.utils.JavaNativeAccess
现在,当我尝试在此Ubuntu框中执行代码时,出现以下错误 Exceptionjava.lang.UnsatisfiedLinkError:查找函数时出错' randomNumber':./ librandomjna.so:undefined symbol:randomNumber
任何帮助都将受到高度赞赏。
由于 卡尼斯卡
答案 0 :(得分:0)
首先,请尝试以下操作:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:.
然后,确保您的so文件包含您期望的内容
nm librandomjna.so | grep rand
答案 1 :(得分:-1)
最后,我通过直接从.c文件
生成.so文件解决了这个问题gcc -shared -fpic -o librandomjna.so randomjna.c
现在.so文件包含所有符号。