【问题标题】:Unable to build Boost with STLport library无法使用 STLport 库构建 Boost
【发布时间】:2011-11-30 06:14:21
【问题描述】:

我正在使用 MSVC 7.1 在 Windows 上使用 STLport 5.2.1 构建 boost 1.48.0,这是我运行的命令行:

b2 toolset=msvc link=shared threading=multi runtime-link=shared variant=debug stdlib=stlport --layout=tagged stage

我的 user-config.jam 设置如下:

using msvc : 7.1 ;
using stlport : 5.2.1 : C:/Code/third_party_source/STLport-5.2.1/stlport : C:/Code/third_party_source/STLport-5.2.1/lib ;

我收到几个与 STLport 相关的链接器错误。其中一个看起来像这样:

path.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall stlpd
_std::basic_string<wchar_t,class stlpd_std::char_traits<wchar_t>,class stlpd_std::allocator<wchar_t>
 >::basic_string<wchar_t,class stlpd_std::char_traits<wchar_t>,class stlpd_std::allocator<wchar_t> >
(class stlpd_std::basic_string<wchar_t,class stlpd_std::char_traits<wchar_t>,class stlpd_std::alloca
tor<wchar_t> > const &)" (__imp_??0?$basic_string@_WV?$char_traits@_W@stlpd_std@@V?$allocator@_W@2@@
stlpd_std@@QAE@ABV01@@Z)

为什么我不能使用 STLport 构建 Boost?

【问题讨论】:

    标签: boost build stlport


    【解决方案1】:

    在 Boost 邮件列表中的一些人的帮助下,我能够使用 STLport 构建 boost。以下是我为遇到此问题的其他人写的一些说明:

    首先确保您已经为各自的编译器编译了 STLport。然后进入 tools/build/v2 目录,将文件 user-config.jam 编辑为以下内容:

    using msvc : 8.0 ;
    using stlport : 5.2.1 : C:/Code/third_party_source/STLport-5.2.1/stlport : C:/Code/third_party_source/STLport-5.2.1/lib-vc8 ;
    

    以上,请确保您使用适当版本的 MSVC 和正确的 STLport 绝对路径。在此示例中,我使用的是 MSVC8,但请根据下表将其更改为您的版本:

    Visual Studio .NET 2003        -- 7.1
    Visual Studio 2005             -- 8.0
    Visual Studio 2008             -- 9.0
    Visual Studio 2010             -- 10.0
    Visual Studio 11               -- 11.0
    

    同样,对于 using stlport 行,请确保指定适当的 STLport 版本。这里我使用的是 5.2.1 版本。下一个参数是 stlport 包含目录的路径(相应更改),第三个也是最后一个参数是 为相同版本的 MSVC 编译的 STLport 库的路径>.

    设置好用户配置文件后,现在您可以通过调用以下命令来构建 boost。

    对于调试:

    b2 toolset=msvc link=shared threading=multi runtime-link=shared variant=debug stdlib=stlport define=_STLP_DEBUG --layout=tagged stage
    

    发布:

    b2 toolset=msvc link=shared threading=multi runtime-link=shared variant=release stdlib=stlport --layout=tagged stage
    

    我缺少的重要更改是调用b2 期间的define=_STLP_DEBUG 选项。

    【讨论】:

      【解决方案2】:

      您的using stlport 行缺少版本说明符。改成:

      using stlport : 5.2.1 : C:/Code/work/rdailey-t510/depot/dev/gfe-dev/server/external/stlport/WINNT5.0_OPT.OBJ/stlport : C:/Code/work/rdailey-t510/depot/dev/gfe-dev/server/external/stlport/WINNT5.0_OPT.OBJ/lib ;
      

      然后,当您调用 bjam/b2 时,指定包含版本的功能,即

      stdlib=stlport-5.2.1
      

      (当然,对于 5.2.1 以外的 STLPort 版本,请替换正确的版本号。)

      【讨论】:

      • 这非常有效。看起来 user-config.jam 文档 (cmets) 需要更新以反映这一点。
      • 实际上它再次失败,出现一堆链接器错误,来自 STLport 的未解析符号......所以不确定 boost 是否试图在 LIB 中链接。
      • @RobertDailey :您可以将-n 传递给 bjam/b2 以查看编译器和链接器命令,而不是执行它们;如果这样做,您是否看到您在 using stlport 中指定的目录被使用了?
      • 是的,我确实看到了 lib 路径。这是正在输出的命令:........link /NOLOGO /INCREMENTAL:NO /DLL /DEBUG /subsystem:console /out:"bin.v2\libs\graph\build\msvc-7.1\debug\stdlib-stlport-5.1\threading-multi\boost_graph-vc71-mt-gdp-1_47.dll" /IMPLIB:"bin.v2\libs\graph \build\msvc-7.1\debug\stdlib-stlport-5.1\threading-multi\boost_graph-vc71-mt-gdp-1_47.lib" /LIBPATH:"C:\Code\work\rdailey-t510\depot\dev\gfe-dev\server\external\stlport\WINNT5.0_OPT.OBJ\lib" @"bin.v 2\libs\graph\build\msvc-7.1\debug\stdlib-stlport-5.1\threading-multi\boost_graph-vc71-mt-gdp-1_47.dll.rsp"
      • 我不得不取消将其标记为不是答案,因为尽管 ildjarn 提供了所有极大的帮助,但我仍然无法使用 STLport 5.2.1 进行构建
      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 2011-11-04
      • 2014-09-07
      相关资源
      最近更新 更多