问题的提出:

        最近在施行多平台编译,原来没有的问题,由于维护多平台而涌现了出来,在其中的一个工程中,用到了fsteam等类库,当初在vs2002中,没有加arxHeader.h编译没问题,由于要向多平台转换,因此加入了arxHeader.h,因为arxHeader.h中把相应的类库引用了进来,而不需要在工程中设置,因此就出现了下面的链接错误:

 

问题的描述:    

error LNK2019: 无法解析的外部符号 "__declspec(dllimport) class std::basic_ostream > & __cdecl std::operator<<(class std::basic_ostream > &,char const *)"

 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall std::basic_ofstream >::basic_ofstream >(void)"

 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall std::basic_ofstream >::`vbase destructor'(void)"

 

问题的根源:

        由于知道是加入了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,编译通过!