3

我正在使用带有 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,它工作正常。我发现在 path_traits 下的 boost 1_48 符号以@GDH@5@@Z结尾,而在 boost 1_53 中,它以@_WDH@5@@Z
结尾 但它仍然试图搜索以@GDH@5@@Z
结尾的 synbol 这可以导致错误?
如果是这样,为什么要使用这些符号?

4

3 回答 3

0

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

相关设置如下:

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

顾名思义boost_1_53_0_filesystem-mt.lib,Boost 库是在发布模式、多线程、DLL 运行时构建的。

这就是你构建项目的方式吗?

于 2013-07-19T11:04:48.330 回答
0

右键单击->属性->在常规选项卡中检查是否

公共语言运行时支持 =“没有公共语言运行时支持”

-> 在 c/C++ 中 -> 代码生成检查是否

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

最后在菜单栏中转到 -> 工具 -> 选项 -> 项目和解决方案 -> VC++ 目录 -> 库文件检查您是否提供了提升 librarus 通常的完整路径

"\boost_1_53\stage\lib"

注意:VS2008 提到了设置路径

于 2013-07-19T12:20:50.547 回答
0

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

于 2015-09-29T08:56:40.630 回答