Compile Boost 1.47 для Windows CE - PullRequest
       8

Compile Boost 1.47 для Windows CE

14 голосов
/ 06 сентября 2011

На самом деле есть немного информации о людях, пытающихся создать библиотеки Boost для Windows CE, но никто не сообщил об успехе и даже не рассказал о шагах, необходимых для этого. В двух последних выпусках (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. Дело в том, что я, честно говоря, не знаю, как его использовать. Мне удалось собрать STLPort для Windows CE, но, следуя руководству по началу работы с Boost (http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html), я застрял на этапе Boost.Build. Нужно ли настраивать на этом этапе компиляцию для CE? не знаю, какие шаги предпринять, и буду признателен за некоторые рекомендации.

Вот шаги, которые я проделал до сих пор:

  1. Компиляция STLPort для Windows CE (документация была довольно приличной, это не оказалось слишком сложным).
  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, я перешел к использованию системы сборки 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 не содержит ничего из этого. Как это работает?

Ответы [ 3 ]

1 голос
/ 10 сентября 2011

На самом деле вам не нужно использовать boost build для создания boost. Я создал часть надстройки, используя скрипт SCons для проекта, где мне нужно было больше контролировать параметры сборки. Это работало довольно хорошо. Это произошло примерно так:

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.

Это может работать для Windows CE, поскольку даст вам больший контроль над процессом сборки. Вы также можете сделать что-то подобное с make или nmake.

Мораль этой истории заключается в том, что наращивание скорости без использования bjam / BoostBuild не так уж сложно.

0 голосов
/ 17 апреля 2013

Я успешно скомпилировал Boost.Thread, Boost.Regex, Boost.System, Boost.Chrono и Boost.Atomic для Windows CE 6.0 на платформе x86.

Основная работа заключалась в том, чтобы сделать WinCE более совместимым с ANSI C.Я немного изменил STLPort и интегрировал с отсутствующей функцией C.Тогда я построил надстройку с STLPort.

Посмотрите на следующую ссылку, которую я разместил:

http://stackoverflow.com/questions/15906901/build-boost-c-wince

http://stackoverflow.com/questions/16016637/boost-c-and-windows-ce-6-0

http://stackoverflow.com/questions/15959877/windows-ce-6-0-and-runtime-link-to-debug-dll-mdd

http://stackoverflow.com/questions/11079337/wince-5-0-using-stlport-void-operator-newsize-t-void-already-has-a-body/15814730#15814730

0 голосов
/ 18 ноября 2011

Это ошибка, которую вы увидите, если в конфигурации набора инструментов msvc указан неверный путь к месту установки набора инструментов.Я видел такие ошибки на машинах с 64-битными окнами, где инструменты предполагают, что компилятор установлен в «C: \ Program Files», но на самом деле он находится в «C: \ Program Files (x86)»

Проверканастройте набор инструментов и убедитесь, что он соответствует месту, где установлен SDK.

...