从MinGW链接到MSVC DLL

Ind*_*ire 29 c++ gcc mingw g++ visual-c++

我正在尝试将LizardTech GeoExpress DSDK链接到我自己的应用程序中.我使用gcc,以便我们可以为平台编译.在Linux和Mac上,这很容易实现:它们提供静态库(libltidsdk.a)和头文件,我们所要做的就是使用它们.

编译windows并不容易.他们使用Microsoft Visual Studio构建了库,我们使用MinGW.我已经阅读了MinGW常见问题解答,我遇到了以下问题.这个库都是C++,所以我的第一个问题是:这甚至可能吗?

只需链接到所提供的dll,就会产生所有C++调用(构造函数,析构函数,方法等)的"未定义引用"错误.

基于MinGW Wiki:http: //www.mingw.org/wiki/MSVC%5Fand%5FMinGW%5FDLLs 我应该能够使用该实用程序reimp将.lib转换为可用的东西.我已经尝试了LizardTech提供的所有.lib文件,它们都给出了"无效或损坏的导入库".我已经尝试了reimp实用程序的0.4和0.3版本.

使用wiki中描述的第二种方法,我在dll上运行pexport和dlltool来获取.a存档,但这会产生相同的未定义引用.

顺便说一句:我已经阅读了下面的讨论.它是否有可能留下一些含糊不清的地方,并且考虑到MinGW Wiki页面,它似乎应该是可行的.如果不可能,那就是我需要知道的全部内容.如果可以做到,我想知道如何实现这一目标.

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

谢谢!

Chr*_*cke 25

你不能这样做.他们从他们的dll而不是C函数中导出了C++类.不同之处在于,c ++函数始终使用特定于编译器特定版本的错位形式导出名称.

msvc只能以这种形式使用它们的dll,并且可能甚至不能在不同版本的msvc之间工作,因为微软之前已经改变了它们的修改方案.

如果你有任何影响力,你需要让他们改变他们的邪恶方式.否则,您将需要使用MSVC编写一个shim dll,它将导入所有类,并通过返回接口的c函数重新导出它们.

  • 我更喜欢mingw版本的一切,因为当c-runtime依赖是普遍可用的msvcrt.dll而不是visual studio版本特定的运行时msvcr70.dll,msvcr71.dll,msvcr80.dll时,它使部署变得非常简单,msvcr90.dll和现在的msvcr100.dll. (5认同)