DLL包括unordered_map没有使用visual studio编译器进行编译

时间:2013-04-22 13:51:46

标签: c++ compiler-construction hashmap mingw unordered-map

我正在尝试使用MinGW编译DLL,并使用Visual Studio编译器编译的可执行文件中使用它。

DLL的一个源文件是使用hash_map<>并且可以使用MinGW成功编译。

当我将hash_map<>更改为std::tr1::unordered_map<>并将#include <tr1/unordered_map>添加到我的代码中时,它已成功编译Visual Studio编译器。(How can I force MinGW to use tr1 namespace?

但是当我尝试使用MinGW作为DLL编译代码并使用Visual Studio编译器编译的可执行文件时,它会给出错误:无法打开包含文件&#39; tr / unordered_map&#39;

我的DLL必须同时与cl和MinGW兼容吗?

编辑: 我的编译命令如下:

g++ -shared -o stemming.dll stemming.cpp alphabet.cpp basic.cpp determinise.cpp fst.cpp hopcroft.cpp operators.cpp utf8.cpp -Wl,--output-def,stemming.def,--out-implib,libstemming.a

lib /machine:i386 /def:stemming.def

cl sfstMinGW.cpp SFST/stemming.lib

1 个答案:

答案 0 :(得分:0)

VC ++正在尝试打开头文件,但无法在include路径中找到它。 VC使用INCLUDE环境变量来确定搜索头文件时要使用的路径。由于VC不使用tr/目录,因此不会找到它。您需要为VC和g ++提供include语句,并选择使用下面的语句。

#if defined(_MSC_VER)
# include <unordered_map>
#else
# include <tr/unordered_map>
#endif

您需要确保使用DLL使用的unordered_map的相同实现来编译应用程序。这意味着您需要更新包含路径以使用GCC的TR1版本而不是MS的标准头文件的实现。