1

我正在编译一个简单的 C++ 文件Temp.cpp

#include <string>
int main() { std::wstring s; }

使用命令行:

cl.exe /MD /Iinc\api\crt\stl60 /Iinc\crt /Iinc\api C:\Temp.cpp
       /LibPath:lib\wxp\i386 /LibPath:lib\crt\i386
       /link /LibPath:lib\wxp\i386 /LibPath:lib\crt\i386

在 WDK 7.1 Windows XP 免费构建环境中。

我收到类似(LNK2019)的链接错误:

unresolved external symbol "__declspec(dllimport) public: __thiscall
    std::basic_string<wchar_t,struct std::char_traits<wchar_t>,
    class std::allocator<wchar_t> >::~basic_string<wchar_t,
    struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >(void)"
    (__imp_??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator
     @_W@2@@std@@QAE@XZ) referenced in function _main

如果我使用string而不是wstring,它可以工作。

问题的原因是什么?如何wchar_t在我的源文件中使用 -based 类型?

4

2 回答 2

6

可能的解决方法是将 /Zc:wchar_t- 设置为关闭 wchar_t 作为内在类型。STL6 对 /Zc:wchar_t 没有很好的支持,这是从至少 VC7.1 开始的默认设置,也许更早。

Meta:请不要使用 STL60 版本的 STL。这个 1998 年的版本缺少现代 STL 中可以找到的大量错误修复、性能改进和标准一致性工作。如果您使用的是 VC 编译器工具链,则免费的 VC++ express 包括 STL。

马丁

于 2011-05-13T07:16:47.440 回答
0

VC6 不支持wchar_t type,它有一个typedeffor unsigned short。链接器只能std::basic_string<unsigned short>在“stl60”库中找到。

于 2011-05-13T07:17:56.380 回答