【问题标题】:Using multiple STLport configurations with Boost通过 Boost 使用多个 STLport 配置
【发布时间】:2014-09-07 00:32:36
【问题描述】:

我在一个 Windows CE 开发项目中使用 Boost (1.54.0, bjam 2011.12.1. OS=NT) 和 STLport (5.2.1)。我首先从一个单一的 Windows CE 平台 SDK 开始,一切都很顺利。但现在我需要支持几个 Windows CE 平台 SDK,每个 SDK 都有自己的系统头文件和编译标志。

首先,我为每个平台(比如 PLATFORM1 和 PLATFORM2)构建了 STLport,并将 STLport 库放到了 c:\lib\STLport-5.2.1\lib\PLATFORM1c:\lib\STLport-5.2.1\lib\PLATFORM2 等位置。

那么,在user-config.jam我有:

using stlport : 5.2.1~PLATFORM1 : c:/lib/STLport-5.2.1/stlport : c:/lib/STLport-5.2.1/lib/PLATFORM1 ;
using stlport : 5.2.1~PLATFORM2 : c:/lib/STLport-5.2.1/stlport : c:/lib/STLport-5.2.1/lib/PLATFORM2 ;

然后,对于 PLATFORM1,我通过运行带有 stdlib=stlport-5.2.1~PLATFORM1 标志的 bjam.exe 来构建 Boost 库,而为 PLATFORM2 构建使用 stdlib=stlport-5.2.1~PLATFORM2

但是 bjam 为 PLATFORM2 使用了错误的 STLport 库路径。例如,使用 -n 标志运行 bjam 会显示以下平台的链接命令(注意第二次调用中的错误 LIBPATH 参数):

link.exe ... /out:"building\...\stdlib-stlport-5.2.1~PLATOFRM1\threading-multi\boost_xxx.dll" ... /LIBPATH:"c:\lib\STLport-5.2.1\lib\PLATFORM1"
link.exe ... /out:"building\...\stdlib-stlport-5.2.1~PLATOFRM2\threading-multi\boost_xxx.dll" ... /LIBPATH:"c:\lib\STLport-5.2.1\lib\PLATFORM1"

基本上,它总是使用来自 user-config.jam 的第一个 using stlport 指令,无论我将什么版本传递给 stdlib 参数。 难道我做错了什么?设置环境以使用不同的 STLport 二进制文件构建 Boost 的正确方法是什么?

【问题讨论】:

    标签: c++ boost windows-ce stlport


    【解决方案1】:

    我通过使用特殊变量来定义 STLport 库位置解决了这个问题。 基本上,我是通过以下方式做到的。

    user-config.jam 中,我将所有 STLport 工具集初始化更改为一个:

    使用 stlport : 5.2.1 : c:/lib/STLport-5.2.1/stlport : c:/lib/STLport-5.2.1/lib/$(STLPORTLIBSUBDIR);

    另外,为了查看变量,我在 using 指令之前的某处添加了以下行:

    本地 STLPORTLIBSUBDIR = [ modules.peek : STLPORTLIBSUBDIR ] ;

    然后,要为 PLATFORM1 构建 Boost 库,我需要向 bjam 传递以下参数:

    stdlib=stlport-5.2.1-sSTLPORTLIBSUBDIR=PLATFORM1

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 2015-04-16
      • 2014-08-22
      • 2014-03-19
      • 1970-01-01
      • 2021-03-28
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多