链接到MinGW的MSVC DLL
我试图将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文件,它们都给“无效或损坏的导入库”。 我已经尝试了0.4版和0.3版的reimp工具。
使用wiki中描述的第二种方法,我已经在dll上运行了pexport和dlltool以获得.a档案,但是它产生了相同的未定义参考。
顺便说一句:我已阅读下面的讨论。 它留下了一些含糊不清的情况,这是否可能,并给了MinGW Wiki页面,似乎这应该是可行的。 如果不可能,那就是我需要知道的。 如果可以做到,我想知道我该如何解决这个问题。
如何链接到VS2008从g ++生成的.libs
谢谢!
你不能这样做。 他们已经从他们的dll导出了C ++类,而不是C函数。 不同之处在于,c ++函数始终以特定于编译器特定版本的特定格式的名称导出。
他们的DLL只有在这种形式下才能被msvc使用,并且可能不会在不同版本的msvc之间工作,因为微软之前已经改变了他们的重组方案。
如果你有任何杠杆作用,你需要让他们改变他们的邪恶方式。 否则,你将需要使用MSVC编写一个shim dll,它将导入所有的类,并通过c函数重新导出它们返回接口。
http://www.mingw.org/wiki/DLL可能对你有用。
我几乎可以肯定,你不能在这样的编译器中链接C ++库。 我尝试过,很努力,但很久以前,我不记得细节。 我认为对于C库是可能的,有很多黑客。
链接地址: http://www.djcxy.com/p/41889.html