包含arxHeader.h的工程中调用了标准fstream,sstream,iosteam等引发链接问题的解决方案
问题的提出:
创新互联建站是一家从事企业网站建设、网站建设、成都网站建设、行业门户网站建设、网页设计制作的专业网站建设公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点上千余家。
最近在施行多平台编译,原来没有的问题,由于维护多平台而涌现了出来,在其中的一个工程中,用到了fsteam等类库,当初在vs2002中,没有加arxHeader.h编译没问题,由于要向多平台转换,因此加入了arxHeader.h,因为arxHeader.h中把相应的类库引用了进来,而不需要在工程中设置,因此就出现了下面的链接错误:
问题的描述:
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) class std::basic_ostream
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall std::basic_ofstream
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall std::basic_ofstream
问题的根源:
由于知道是加入了arxHeader.h引发的错误,但是为什么会出现这样的错误呢,经过耐心的寻找(二分查错法),最近锁定在了dbColor.h中的内容:
//prevent the MS header "use_ansi.h" from outputing
//its linker directives, we expect clients to specify
//what flavor (debug/release) of the C++ runtime they want to
//link against.
#pragma push_macro("_USE_ANSI_CPP")
#define _USE_ANSI_CPP
#include
#pragma pop_macro("_USE_ANSI_CPP")
原来是AutoDesk公司为了防止链接错误,而让用户自己指定相应的类库
问题的解决:
知道原因就很容易解决问题了,由于本工程是多线程DLL的DEBUG版,故在链接库中添加msvcprtd.lib,编译通过!
网站标题:包含arxHeader.h的工程中调用了标准fstream,sstream,iosteam等引发链接问题的解决方案
文章位置:http://scjbc.cn/article/igpopp.html