首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含unordered_map的DLL未使用visual studio编译器进行编译

包含unordered_map的DLL未使用visual studio编译器进行编译
EN

Stack Overflow用户
提问于 2013-04-22 21:51:46
回答 1查看 722关注 0票数 0

我正在尝试用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吗?

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-04-22 22:08:42

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

代码语言:javascript
复制
#if defined(_MSC_VER)
# include <unordered_map>
#else
# include <tr/unordered_map>
#endif

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16148871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档