为 Windows CE 编译 Boost 1.47

2023-12-27

实际上有一些关于人们尝试为 Windows CE 构建 Boost 库的信息,但没有人报告成功,甚至没有给出这样做所需的步骤。对于两个最新版本(1.46 和 1.47),发行说明提到他们的测试编译器之一是“Visual C++,Windows Mobile 5,带有 STLport:9.0”,这似乎意味着已经取得了成功(作为旁注)给出的编译器很有趣,因为我能够下载的最新 STLPort 是 5.2.1。我错过了什么吗?)。

我发现的帖子似乎围绕此处包含的文件:http://www.boost.org/development/tests/trunk/VeecoFTC.html http://www.boost.org/development/tests/trunk/VeecoFTC.html。问题是,老实说我不知道​​如何使用它。我能够为 Windows CE 构建 STLPort,但遵循 Boost 入门指南 (http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html)我陷入了 Boost.Build 阶段。我现在需要配置才能编译 CE 吗?我只是不知道要采取什么步骤,希望得到一些指导。

这些是我到目前为止所遵循的步骤:

  1. 为 Windows CE 编译 STLPort(文档相当不错,这并没有证明太困难)。
  2. 根据入门指南安装 Boost.Build。我在这一步上有点犹豫,因为 bootstrap.bat 文件似乎特定于“ntx86”和“ntx86_64”。我已经搞砸了吗?

此时,假设我已经正确完成了操作,我需要使用类似的命令来运行 b2

b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage

我假设我的构建目录是我用于 Boost.Build 的前缀,构建类型和阶段将保持给定,但我不知道要使用什么工具集名称。 VeecoFTC 文件有多个 msvc 和 stlport 条目。我删除了与“wm5”无关的两个条目,但是当我使用以下命令进行编译时

b2 --build-dir=C:\boost-build toolset=msvc --build-type=complete stage

我收到一堆错误,例如:

compile-c-c++ C:\boost-build\boost\bin.v2\libs\regex\build\msvc-9.0~wm5~stlport5.2\debug\threading-multi\has_icu_test.obj
The system cannot find the path specified.

事实上,该文件不存在,但 has_icu_test.obj.rsp 存在。我错过了什么吗?我是否走在正确的轨道上?

UPDATE:

由于我无法让 Boost.Build 工作,而且在 Boost.Build 邮件列表上也没有得到任何人的喜爱,所以我开始尝试使用 Boost 的 CMake 构建系统:http://gitorious.org/boost/cmake http://gitorious.org/boost/cmake。我将其与 CEgcc 结合使用(我对 Linux 比 Windows 更熟悉),并且遇到以下错误:

boost/config/requires_threads.hpp:47:5: error: #error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)"

-mthreads 是 C 和 CXX 标志的一部分——问题是 BOOST_PLATFORM_CONFIG 不是由 boost/config/select_platform_config.hpp 定义的。对于 Windows CE 应该定义什么?我认为它应该是 boost/config/platform/win32.hpp (然后定义 BOOST_HAS_WINTHREADS,这将解决上述错误)。当 select_platform_config.hpp 似乎无法处理 Windows CE 情况时,发行说明如何声称此功能有效?如果 BOOST_PLATFORM_CONFIG 确实需要是 boost/config/platform/win32.hpp,那么我需要定义 _WIN32,WIN32,或WIN32。我的第一反应是这些都不应该用于编译 CE。此外,VeecoFTC 文件不包含任何这些内容。它是如何工作的?


您实际上不必使用 boost build 来构建 boost。我使用 SCons 脚本为一个需要对构建选项进行更多控制的项目构建了部分 boost。效果很好。事情是这样的:

import os

env = Environment()

boost_source = os.environ.get('BOOST_SOURCE', None)
if not boost_source:
    raise Exception, 'BOOST_SOURCE not set'

env.Append(CPPPATH = [boost_source])

if env['PLATFORM'] == 'win32':
    env.Append(CPPDEFINES = ['BOOST_ALL_NO_LIB'])


VariantDir('build', boost_source + '/libs')

import glob
import re

for lib in ['iostreams', 'filesystem', 'system', 'regex', 'thread',
            'serialization']:
    src = []
    path = boost_source + '/libs/%s/src' % lib

    if lib == 'thread':
        if env['PLATFORM'] == 'win32':
            src.append(path + '/tss_null.cpp')
            path += '/win32'
            env.Append(CPPDEFINES = ['BOOST_HAS_WINTHREADS',
                                     'BOOST_THREAD_BUILD_LIB'])
        else: path += '/pthread'

    src += glob.glob(path + '/*.cpp')

    src = map(lambda x: re.sub(re.escape(boost_source + '/libs'), 'build', x),
              src)

    libname = 'boost_%s' % lib
    if env['PLATFORM'] == 'win32': libname = 'lib' + libname
    lib = env.Library('lib/' + libname, src)

Clean(lib, 'build')
Clean(lib, 'lib')

此 SCons 脚本仅搜索列出的 boost 模块中的源文件并使用默认编译器进行编译。我通过 BOOST_SOURCE 环境变量传入 boost 源目录的路径。

这可能适用于 Windows CE,因为它可以让您更好地控制构建过程。您还可以使用 make 或 nmake 执行类似的操作。

这个故事的寓意是,在不使用 bjam/BoostBuild 的情况下构建 boost 并不难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Windows CE 编译 Boost 1.47 的相关文章

随机推荐