原文链接http://tsing01.blog.163.com/blog/static/205957283201302544547421/
在向vs2005工程中添加使用cximage库时,碰到下面的链接错误:
error LNK2001: 无法解析的外部符号 "public: bool __thiscall CxImage::Load(unsigned short const *,unsigned long)" (?Load@CxImage@@QAE_NPBGK@Z)
其中工程使用了unicode字符集,所以把cximage的配置也改为了unicode 字符集,检查运行时库也是相同的,且工程的debug/release对应上cximage的debug/release库,但还是消除不了这个错误,折 腾了半天,只好用笨办法,重新建了个空工程,加入cximage库,编译居然没错,于是一项项对比工程配置,终于发现了问题所在:cximage源工程中 将wchar_t设置为内置类型的选项和当前工程中的不一致,都改成否(/Zc:wchar_t-)后rebuild all问题解决。
于是搜索了下msdn,发现了这个错误的源头:
当调用采用 wchar_t 类型的静态库或 DLL 中的函数时(请注意,BSTR 和 LPWSTR 解析为 wchar_t*),可能会遇到“LNK2001 无法解析的外部符号错误”。此错误由 /Zc:wchar_t 编译器选项引起,默认情况下此选项在新的 MFC 项目中设置为打开。此选项使编译器将 wchar_t 当作本机类型。在 Visual C++ .NET 以前版本中,wchar_t 被当作 unsigned short。如果主项目和库不使用 /Zc:wchar_t 的相同设置,这将导致函数签名不匹配。若要避免此问题,请使用 /Zc:wchar_t 编译器选项重新生成该库,或使用“属性页”对话框中“语言”属性页上的“将 wchar_t 视为内置类型”设置在主项目中将该选项关闭。
当调用采用 wchar_t 类型的静态库或 DLL 中的函数时(请注意,BSTR 和 LPWSTR 解析为 wchar_t*),可能会遇到“LNK2001 无法解析的外部符号错误”。此错误由 /Zc:wchar_t 编译器选项引起,默认情况下此选项在新的 MFC 项目中设置为打开。此选项使编译器将 wchar_t 当作本机类型。在 Visual C++ .NET 以前版本中,wchar_t 被当作 unsigned short。如果主项目和库不使用 /Zc:wchar_t 的相同设置,这将导致函数签名不匹配。若要避免此问题,请使用 /Zc:wchar_t 编译器选项重新生成该库,或使用“属性页”对话框中“语言”属性页上的“将 wchar_t 视为内置类型”设置在主项目中将该选项关闭。