C++ WDK STL 是不是支持 wchar_t?我得到未解析的外部符号:(

Posted

技术标签:

【中文标题】C++ WDK STL 是不是支持 wchar_t?我得到未解析的外部符号:(【英文标题】:Is wchar_t Supported in C++ WDK STL? I get Unresolved External Symbol's :(C++ WDK STL 是否支持 wchar_t?我得到未解析的外部符号:( 【发布时间】:2011-05-13 07:07:33 【问题描述】:

我正在编译一个简单的 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 的类型?

【问题讨论】:

WDK 是指 Windows SDK 吗? @jalf:不,它是 Windows 驱动工具包。 @Andreas:什么都没做,虽然我怀疑它可能是类似的东西...... :( 【参考方案1】:

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

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

马丁

【讨论】:

你太棒了!!!这解决了它,非常感谢(让我更加痛苦)! :) 好,现在将您的编译器升级到本世纪以来的版本。 ;)【参考方案2】:

VC6 不支持wchar_t type,它有一个typedef 用于unsigned short。链接器只能在“stl60”库中找到std::basic_string&lt;unsigned short&gt;

【讨论】:

以上是关于C++ WDK STL 是不是支持 wchar_t?我得到未解析的外部符号:(的主要内容,如果未能解决你的问题,请参考以下文章

使用 WinApi 时是不是需要 wchar_t 来支持 unicode?

SWIG:对 Java 的 wchar_t 支持

WDK:将 PVOID 转换为 PWCHAR(C 到 C++ 转换)

Python中是不是有类似于C++ STL map的结构?

为啥 char 既不是有符号也不是无符号,而 wchar_t 是?

为啥它被称为“wchar_t”而不是简单的“wchar”?