gpt4 book ai didi

Java 应用程序能够加载库但找不到函数(Visual C++ 名称修改?)

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

这是我第一次使用 JNI。我需要从 Java 程序调用第三方 Visual C++ 库,所以我用 Visual C++ 编写了一个包装器。该库加载正常,但当我尝试从我的包装器库中调用一个函数时,我得到了可怕的 UnsatisfiedLinkError。

我的包装器包含由 javah 创建的 .h 文件,并且在 .cpp 文件中包含以下内容:

JNIEXPORT jboolean JNICALL Java_Foo_bar (...)

但库显示(在 PE Explorer 中)_Java_Foo_bar@32

我的 Java 代码有

类 Foo 中的 public native boolean bar(...)

我怀疑 @32 是 Java 的绊脚石,但我不知道如何摆脱它。我对编译器/链接器设置等知之甚少 - 我在大多数情况下都能够摆脱默认设置,或者让其他人处理项目的这一部分。

在此先感谢您的帮助!

最佳答案

尝试导出您的 C++ 函数 as a C function :

extern "C" JNIEXPORT jboolean JNICALL Java_Foo_bar (...)

这会关闭名称修改。

编辑:这确实不是重整,而是“装饰”,这显然总是针对 JNI 使用的 __stdcall 约定完成的。添加一个 .def 文件或一个 /export 链接器参数似乎是 solution .

关于Java 应用程序能够加载库但找不到函数(Visual C++ 名称修改?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4052150/

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