0

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

来自 DLL 的源文件之一是使用 hash_map<> ,它可以使用 MinGW 成功编译。

当我更改hash_map<>std::tr1::unordered_map<>添加#include <tr1/unordered_map>到我的代码时,它正在为 Visual Studio 编译器成功编译。(如何强制 MinGW 使用 tr1 命名空间?

但是,当我尝试使用 MinGW 将代码编译为 DLL 并从使用 Visual Studio 编译器编译的可执行文件中使用它时,会出现错误:无法打开包含文件 'tr/unordered_map'

我的 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
4

1 回答 1

0

VC++ 试图打开一个头文件,但在包含路径中找不到它。VC 使用INCLUDE环境变量来确定搜索头文件时要使用的路径。由于 VC 不使用该tr/目录,它不会找到它。您需要为 VC 和 g++ 提供包含语句,并选择使用哪一个,如下所示。

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

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

于 2013-04-22T14:08:42.210 回答