gpt4 book ai didi

java - JNA 代码在 OSx 中运行良好,但无法在 Linux 中从 C 共享对象文件中查找函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:06 25 4
gpt4 key购买 nike

我正在使用以下示例: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 classes

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

在 OSx 中,它按预期工作并能够执行 C 函数 list_files

现在在Linux Box中,我创建的.so文件如下

gcc -shared -fpic -o librandomjna.o randomjna.c

gcc -shared -o librandomjna.so *.o

In the same way, new classes are generated in Linux mkdir classes

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

  • 可能会出现什么问题?
  • .dylib 和 .so 文件有什么区别?
  • 为什么 .dylib (mac osx) 可以解析所有函数调用,而 .so 文件 (linux) 无法查找函数?

我们将不胜感激任何帮助。

谢谢卡尼斯卡

最佳答案

首先,尝试以下操作:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:.

然后,确保你的 so 文件包含你期望的内容

nm librandomjna.so | grep rand

关于java - JNA 代码在 OSx 中运行良好,但无法在 Linux 中从 C 共享对象文件中查找函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45366115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com