Compile Boost 1.47 для Windows CE
На самом деле есть немного информации о людях, пытающихся создать библиотеки Boost для Windows CE, но никто не сообщил об успехах или даже не дал шагов, необходимых для этого. В двух последних выпусках (1.46 и 1.47) в примечаниях к выпуску упоминалось, что одним из их тестовых компиляторов был "Visual С++, Windows Mobile 5, с STLport: 9.0", что, по-видимому, означает, что успех был достигнут (в качестве примечания компилятор интересен тем, что последний STLPort, который я смог скачать, - это 5.2.1. Я что-то упустил?).
Посты, которые я нашел, похоже, вращаются вокруг файла, содержащегося здесь: http://www.boost.org/development/tests/trunk/VeecoFTC.html. Дело в том, что я честно не знаю, как его использовать. Я смог построить STLPort для Windows CE, но после руководства по началу работы с Boost (http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html) я застрял на этапе Boost.Build. Должна ли мне конфигурировать на данный момент для компиляции для CE? Я просто не знаю, какие шаги предпринять, и я бы оценил некоторые рекомендации.
Вот шаги, которые я выполнил до сих пор:
- Скомпилируйте STLPort для Windows CE (документация была довольно приличной, это не оказалось слишком сложным).
- Установите 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, я перешел к попытке создания системы сборки CMake для Boost: 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 не содержит ни одного из них. Как работает ИТ?
Ответы
Ответ 1
На самом деле вам не нужно использовать boost build для создания boost. Я создал часть boost, используя SCons script для проекта, где мне нужно было больше контролировать варианты сборки. Он работал достаточно хорошо. Это произошло примерно так:
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 script просто ищет исходные файлы в перечисленных модулях boost и компилируется с помощью компилятора по умолчанию. Я передаю путь к каталогу источника источника с помощью переменной среды BOOST_SOURCE.
Это может работать для Windows CE, поскольку это даст вам больший контроль над процессом сборки. Вы также можете сделать что-то подобное с make или nmake.
Мораль этой истории заключается в том, что наращивание здания с использованием bjam/BoostBuild не так уж сложно.
Ответ 2
Это ошибка, которую вы увидите, если конфигурация набора инструментов msvc имеет неправильный путь к тому, где установлен набор инструментов. Я видел такие ошибки на 64-битных машинах Windows, где инструменты предполагают, что компилятор установлен в "C:\Program Files", но на самом деле он находится в "C:\Program Files (x86)"
Проверьте конфигурацию набора инструментов и убедитесь, что она соответствует местоположению, где установлен SDK.
Ответ 3
Я с успехом компилирую Boost.Thread, Boost.Regex, Boost.System, Boost.Chrono и Boost.Atomic для Windows CE 6.0 на платформе x86.
Основная работа заключалась в том, чтобы сделать WinCE более совместимым с ANSI C. Я изменил бит STLPort и интегрировал с отсутствующей функцией C. Затем я построил boost с помощью STLPort.
Посмотрите на следующую ссылку, которую я опубликовал:
http://stackoverflow.com/info/15906901/build-boost-c-wince
http://stackoverflow.com/info/16016637/boost-c-and-windows-ce-6-0
http://stackoverflow.com/info/15959877/windows-ce-6-0-and-runtime-link-to-debug-dll-mdd
http://stackoverflow.com/info/11079337/wince-5-0-using-stlport-void-operator-newsize-t-void-already-has-a-body/15814730#15814730