我正在使用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?
答案 0 :(得分:4)
在Boost邮件列表上的一些人的帮助下,我能够通过STLport获得建设。以下是我为其他遇到此问题的人写的一些说明:
首先确保已为各自的编译器编译了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包含目录的路径(相应地更改),第三个也是最后一个参数是STLport库的路径 为MSVC的相同版本编译
设置用户配置文件后,现在可以通过调用以下命令来构建boost。
对于DEBUG:
b2 toolset=msvc link=shared threading=multi runtime-link=shared variant=debug stdlib=stlport define=_STLP_DEBUG --layout=tagged stage
对于RELEASE:
b2 toolset=msvc link=shared threading=multi runtime-link=shared variant=release stdlib=stlport --layout=tagged stage
在define=_STLP_DEBUG
调用期间,我遗漏的重要更改是b2
选项。
答案 1 :(得分:3)
您的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版本,请替换正确的版本号。)