gpt4 book ai didi

java - MAC OSX-Write Xcode .Dylib 用于 JNA (Java Native Access) -JAVA

转载 作者:行者123 更新时间:2023-11-30 11:15:30 25 4
gpt4 key购买 nike

到目前为止,我已经在 Windows 中成功地使用带有 JNA 的 dll 文件。我已经在 VC++ 中成功创建了 dll,然后使用 JNA 在 Java 中加载了它。但现在我有要求,我也需要在 Mac Os 中提供相同的软件。

因为我没有使用过 mac os 和 Xcode,所以我不知道如何创建 .dylib。

这是我迄今为止使用 Google 和其他资源尝试过的内容。

1)打开Xcode,选择“创建一个新的Xcode项目”

2)选择Framework & library,点击C/C++ Library

3) 我将项目名称命名为 SimpleDylib,将类型选择为 Dynamic,然后按下一步。

4) 然后我向这个项目添加了一个新文件,一个 C++ 文件,并命名为 SimpleDylib.cpp

5) 我写了一个简单的函数

int addNumber(int a,int b)
{
返回 a+b;
}

从这里我不知道如何导出这个函数。就像在 Windows VC++ 中一样,我使用 .def 文件成功导出函数。在使用 jna 的 Java 中,我能够成功地使用此 dll 并在 dll 中运行。

我尝试在 Xcode 中使用

#define EXPORT _attribute__((visibility("default")))
导出
int addNumber(int a,int b)
{
返回 a+b;
}

但我仍然无法在 Java 中使用此 dylib,并且出现错误

Exception in thread "main" java.lang.UnsatisfiedLinkeError: Error lloking up function 'addNumber' : dlsym(0x7fb930d49930,addNumber) : symbol not found

那么我如何从 dylib 中导出函数呢?到目前为止,我的上述步骤是否正确? JNA-JAVA 中可以加载和使用的.dylib 的创建方法是什么。

最佳答案

如果您的文件是 .cpp文件那么你无疑正在遭受 C++名称修改。

您需要添加 extern "C"像这样导出:

extern "C" EXPORT int addNumber(int a,int b)

要验证例程是否损坏,您可以使用 nm 查看 .dylib,例程的损坏版本如下所示:__Z9addNumberii而未损坏的版本看起来像 _addNumber .

此外,在 OSX 上,与 JNI/JNA 一起使用的共享库的首选扩展名是 .jnilib , 不是 .dylib , 但除了文件扩展名外,它们在所有方面都相同

关于java - MAC OSX-Write Xcode .Dylib 用于 JNA (Java Native Access) -JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387238/

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