如何链接到VS2008从g ++生成.libs

时间:2009-11-25 11:05:41

标签: c++ visual-c++ g++

我正在尝试使用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。

5 个答案:

答案 0 :(得分:1)

天儿真好,

不确定这是否可行,因为除了名称错误之外,来自不同供应商的编译器之间存在太多差异。事情如:

  1. this处理,
  2. v-tables的布局和内容,
  3. 班级布局,
  4. 参数序列,
  5. 注册处理,
  6. 返回值处理,
  7. 我有兴趣看看它是否可能。

答案 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。如果可能的话。