【发布时间】:2012-01-02 01:36:30
【问题描述】:
当我在我的 c++ 项目中同时使用 Qt (v4.7.4) 和 Boost(尝试过 v1.47 和 v1.48)时,我收到一个由包含 <boost\filesystem.hpp> 的类引起的链接器错误。我刚刚设置了 Qt,并且在代码正常工作之前没有任何问题。
这是错误信息:
...obj:错误 LNK2001:未解析的外部符号“私有:静态类 std::codecvt const * & __cdecl boost::filesystem3::path::wchar_t_codecvt_facet(void)”(?wchar_t_codecvt_facet@path@filesystem3@boost @@CAAAAPBV?$codecvt@GDH@std@@XZ)
...obj : 错误 LNK2001: 无法解析的外部符号 "void __cdecl boost::filesystem3::path_traits::convert(char const *,char const *,class std::basic_string,class std::allocator > &,类 std::codecvt const &)" (?convert@path_traits@filesystem3@boost@@YAXPBD0AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@ABV? $codecvt@GDH@5@@Z)
...obj : 错误 LNK2001: 无法解析的外部符号 "void __cdecl boost::filesystem3::path_traits::dispatch(class boost::filesystem3::directory_entry const &,class std::basic_string,class std::allocator > &,class std::codecvt const &)" (?dispatch@path_traits@filesystem3@boost@@YAXABVdirectory_entry@23@AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2 @@std@@ABV?$codecvt@GDH@6@@Z)
...obj:错误 LNK2001:未解析的外部符号“void __cdecl boost::filesystem3::path_traits::convert(unsigned short const *,unsigned short const *,class std::basic_string,class std::allocator > &,class std::codecvt const &)" (?convert@path_traits@filesystem3@boost@@YAXPBG0AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ ABV?$codecvt@GDH@5@@Z)
...exe : 致命错误 LNK1120: 4 unresolved externals
编辑:
Here我发现有人有这个问题得出这个结论:
这确实是一个 Qt 问题。使用 wchar_t 作为本机类型,您必须 使用相同的编译器开关重新编译 Qt。甚至还有一个bug 追踪者:https://bugreports.qt.io/browse/QTBUG-9617
一般来说,你必须非常小心,不要混用 wchar_t 项目中的编译器设置,因为它们将变得不兼容。
所以我重新编译了Qt设置/Zc:wchar_t,但没有显示任何效果。我仍然得到同样的错误。
【问题讨论】:
-
你编译过boost吗?我不太熟悉究竟需要构建什么,但有些库确实如此。
-
是的。如果我没记错的话,我已经使用
b2.exe为 Visual Studio 2010 编译了它。 -
是否有必要重新编译整个 boost 库?我不记得确切的构建配置,但我在编译 boost 时绝对没有更改
treat wchar_t as build-in type属性。 -
你能从你的编译器输出中至少包含一行吗?也许
cl ...?在我看来,您的/Zc:wchar_t出于某种原因没有使用。您的编译器输出会显示这一点。 -
对不起,我的意思是当你编译导致问题的程序时。 “编译输出”窗口显示用于编译程序的命令。你应该有类似
cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -EHsc -W3 -w34100 -w34189 -WX ... blah ... blah ... blah
标签: c++ visual-studio-2010 qt boost linker-errors