来自boost文件系统的未解析符号

时间:2013-07-19 10:37:32

标签: c++ boost linker

我在VS10中使用boost 1_53库。
在链接期间我收到许多未解析的符号。如下:

error LNK2019: unresolved external symbol "void __cdecl boost_1_53_0::filesystem::path_traits::convert(char const *,char const *,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &,class std::codecvt<unsigned short,char,int> const &)" (?convert@path_traits@filesystem@boost_1_53_0@@YAXPEBD0AEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEBV?$codecvt@GDH@5@@Z) referenced in function "void __cdecl boost_1_53_0::filesystem::path_traits::convert(char const *,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &,class std::codecvt<unsigned short,char,int> const &)" (?convert@path_traits@filesystem@boost_1_53_0@@YAXPEBDAEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEBV?$codecvt@GDH@5@@Z)

我已检查/ LIBPATH设置正确“boost_1_53_0_filesystem-mt.lib”即将进入链接线。
我使用dumpbin在“lib”中找到它的符号:

00000036  REL32 00000000 515  ?convert@path_traits@filesystem@boost_1_53_0@@YAXPEBD0AEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEBV?$codecvt@_WDH@5@@Z (void __cdecl boost_1_53_0::filesystem::path_traits::convert(char const *,char const *,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > &,class std::codecvt<wchar_t,char,int> const &))

此参数更改是否会导致问题?

修改
我想补充更多细节:
以前我使用的是boost 1_48,工作正常。 我发现在boost_traits下的boost 1_48符号以boost 1_53中的 @ GDH @ 5 @@ Z 结尾,结尾为 @_ WDH @ 5 @@ Z
但仍然试图用 @ GDH @ 5 @@ Z 来搜索synbol结尾 这可能会导致错误?
如果是这样,为什么它采取这些符号?

3 个答案:

答案 0 :(得分:0)

除非您已经构建了Boost库的每个可能的排列,否则必须确保您的编译器设置与用于构建Boost的设置相匹配。

相关设置为:

  • 调试与发布
  • 静态链接运行时与DLL
  • 单线程与多线程

名称boost_1_53_0_filesystem-mt.lib意味着Boost库是构建发布模式,多线程,DLL运行时。

您是如何构建项目的?

答案 1 :(得分:0)

右键单击 - &GT;属性 - &gt;在常规标签中 检查是否

  

Common Language Runtime support =“No Common Language Runtime support”

- &GT;在c / C ++中 - &gt;代码生成 检查是否

  

运行时库多线程DLL(/ MD)

终于在菜单栏中转到 - &GT;工具 - &gt;选项 - &gt;项目和解决方案 - &gt; VC ++目录 - &gt;库文件 检查你是否已经给出了通常提升librarus的完整路径

  

“\ boost_1_53 \阶段\ lib中”

注意:VS2008提到了设置路径

答案 2 :(得分:0)

您可以检查您是否使用64位编译的boost库而不是32位的(反之亦然)。这是使用boost :: filesystem时发生的事情。