Kyl*_*yle 14 c++ boost windows-ce
实际上有一些关于人们试图为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.问题是,老实说,我不知道如何使用它.我能够为Windows CE构建STLPort,但是按照Boost入门指南(http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html),我陷入了Boost.Build阶段.此时我是否需要配置为CE编译?我只是不知道采取什么步骤,并希望得到一些指导.
这是我到目前为止所遵循的步骤:
在这一点上,假设我已经完成了正确的事情,我需要用类似的东西运行b2
b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage
Run Code Online (Sandbox Code Playgroud)
我假设我的构建目录是我用于Boost.Build的前缀,构建类型和阶段将保持给定,但我不知道要使用什么工具集名称.VeecoFTC文件有多个msvc和stlport条目.我删除了与"wm5"无关的两个条目,但是当我使用以下命令编译时
b2 --build-dir=C:\boost-build toolset=msvc --build-type=complete stage
Run Code Online (Sandbox Code Playgroud)
我得到一堆错误,如:
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.
Run Code Online (Sandbox Code Playgroud)
实际上,该文件不存在,但has_icu_test.obj.rsp存在.我错过了什么吗?我是否走在正确的轨道上?
更新:
由于我无法让Boost.Build工作并且在Boost.Build邮件列表上没有爱,我已经开始尝试使用Boost的CMake构建系统:http://gitorious.org/boost/cmake.我和CEgcc一起使用它(我比Linux更熟悉Linux),我遇到了以下错误:
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)"
Run Code Online (Sandbox Code Playgroud)
-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')
Run Code Online (Sandbox Code Playgroud)
此 SCons 脚本仅搜索列出的 boost 模块中的源文件并使用默认编译器进行编译。我通过 BOOST_SOURCE 环境变量传入 boost 源目录的路径。
这可能适用于 Windows CE,因为它可以让您更好地控制构建过程。您还可以使用 make 或 nmake 执行类似的操作。
这个故事的寓意是,在不使用 bjam/BoostBuild 的情况下构建 boost 并不难。