如上所述,在使用 JNI 调用任意提供的 DLL 中的类函数时,我遇到了“ undefined reference 错误 imp_ZN12classNameC1Ev”。我想知道 2 个不同编译器的名称修改不兼容是否是错误的来源?
准确的说,一个用MinGW(gcc/g++)编译的代码可以调用另一个用visualStudio编译的代码的类函数吗?
最佳答案
编译并不是问题所在。问题出在链接。如果您有 C++ 接口(interface),那么名称修改肯定会给您带来麻烦。每个编译器都有自己的名称修改方案。太糟糕了,他们可能也应该在 C++ 标准中对此进行标准化...
解决此问题的一种方法是围绕您拥有的 C++ Dll(必须使用 MSVC 编译)创建一个小型 C 包装器 API,并使用来自 Netbeans 的此 C API。 (最终为 c++ dll 中的类制作了一些仅包含 C++ header 的包装器,使其看起来像原始的 Api。这是两层包装,但我不知道是否可以用更简单的方法解决这个问题。
关于java - Netbeans(用于 c/c++ 的 MinGW 编译器)可以调用任意 C/C++ DLL(在 VS'05 中编译)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5012633/