我正在尝试用MinGW编译一个动态链接库,并在用visual studio编译器编译的可执行文件中使用它。
动态链接库中的一个源文件正在使用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编译器编译的可执行文件中使用它时,它给出错误:无法打开包含文件'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发布于 2013-04-22 22:08:42
VC++正在尝试打开一个头文件,但在包含路径中找不到它。VC使用INCLUDE环境变量来确定搜索头文件时要使用的路径。因为VC不使用tr/目录,所以它不会找到它。您需要为VC和g++提供包含语句,并选择要使用的语句,如下所示。
#if defined(_MSC_VER)
# include <unordered_map>
#else
# include <tr/unordered_map>
#endif您需要确保使用与DLL相同的unordered_map实现来编译应用程序。这意味着您将需要更新包含路径,以使用GCC版本的TR1,而不是MS的标准头实现。
https://stackoverflow.com/questions/16148871
复制相似问题