java - Netbeans(用于 c/c++ 的 MinGW 编译器)可以调用任意 C/C++ DLL(在 VS'05 中编译)吗?

标签 java c++ visual-c++ java-native-interface

如上所述,在使用 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/

相关文章:

c++ - C++ 与 C++.NET 之间的主要区别是什么?

c++ - 如何使用 C++ 输出可执行文件

c++ - 在 MSVC ABI 中,如何可靠地找到仅给出 (void*) 的 vtable?

c++ - Boost.Spirit 解析可选前缀

C++ Treiber Stack 和原子 next 指针

c++ - VS2010 中的 Magick++ - 未解析的外部符号

java - 如何使用 org.json 库从 Java 中的 JSON 文件中获取每个键和值?

java - Gradle - 将第三方依赖项安装到本地 Ivy 存储库中

java - SPINNER 沟通和结果

java - 根据 xml 文件中属性的更改更新 java 类中的数据