我正在尝试将LizardTech GeoExpress DSDK链接到我自己的应用程序中。我使用gcc以便我们可以在平台上进行编译。在Linux和Mac上,这很容易工作:它们提供了一个静态库(libltidsdk.a
)和 header ,而我们要做的就是使用它们。
Windows编译不是那么容易。他们使用Microsoft Visual Studio构建了该库,我们使用了MinGW。我已经阅读了MinGW常见问题,并且遇到了以下问题。该库全是C++,所以我的第一个问题是:可能吗?
只是按提供的DLL链接会为所有C++调用(构造函数,解构函数,方法等)产生“ undefined reference ”错误。
基于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存档,但是会产生相同的 undefined reference 。
顺便说一句:我已经阅读了下面的讨论。关于是否可行,这留下了一些歧义,鉴于MinGW Wiki页面似乎应该可行。如果不可能,那就是我所需要知道的。如果可以做到,我想知道如何实现这一目标。
How to link to VS2008 generated .libs from g++
谢谢!
最佳答案
你做不到他们从自己的dll中导出了C++类,而不是C函数。区别在于,c++函数始终以特定于编译器特定版本的整齐形式导出名称。
他们的dll仅可通过msvc以这种形式使用,并且可能甚至在不同版本的msvc之间也无法使用,因为Microsoft之前已更改了它们的处理方案。
如果您有任何杠杆作用,则需要让他们改变其邪恶的方式。否则,您将需要使用MSVC编写一个shim dll,它将导入所有类,然后通过返回接口(interface)的c函数将其重新导出。
关于c++ - 从MinGW链接到MSVC DLL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2472924/