我正在尝试使用cygwin下的mingw g ++构建一个dll。
我有.h文件引用由.dll导出的对象,这些文件是使用MS Visual Studio 2008构建的。我链接到使用该.dll生成的.lib。
当我运行g ++时,我遇到了很多这样的错误
/cygdrive/c/dev/blox/ulfx/ulfx/JavaInterface.cpp:206: undefined reference to `__imp___ZNK18DLLSafeDoubleArray4sizeEv'
我要链接的.dll公开了一个名为
的函数?size@DLLSafeDoubleArray@@QBEIXZ
我认为这里的问题是g ++名称修改与VS2008名称修改不兼容。
有没有办法可以强迫g ++使用兼容的修改?
我的计算机上没有安装任何版本的Visual Studio。
答案 0 :(得分:1)
天儿真好,
不确定这是否可行,因为除了名称错误之外,来自不同供应商的编译器之间存在太多差异。事情如:
this
处理,我有兴趣看看它是否可能。
答案 1 :(得分:1)
也许这个页面有帮助:
http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs
我确实设法做了一次,但它只是我在我找到一个图书馆做我想要的时候放弃的原型。我确实遵循了他们的指示,但我自己制作了这个dll。
答案 2 :(得分:1)
我同意Rob Wells评论,C ++中有很多东西可能会破坏。
应该更简单,更安全,更可能的是使用普通的C函数,因为主要担心的是调用约定以及结构的可能打包和对齐。
答案 3 :(得分:1)
不同C++
编译器生成的对象代码不链接兼容。
这是故意:编译器使用不同的ABI,如果名称maingling没有阻止你链接,你现在想知道/调试为什么最简单的操作导致你的可执行文件崩溃。
您应该感激不同的名称修改方案使您免受调试工作。
答案 4 :(得分:0)
更好的方法是用g ++重新编译dll。如果可能的话。