Я успешно построил STLPort и Boost c ++ для Windows CE 6.0. Я могу запустить приложение с Windows CE 6 и STLPort как в режиме окончательного выпуска отладки.
Я построил boost с помощью следующего пакетного файла:
@echo off
cls
:build
:release
echo building boost in release shared library
bjam ^
--with-system ^
--with-chrono ^
--with-date_time ^
--with-thread ^
--with-atomic ^
toolset=msvc-9.0~CEPlatform ^
variant=release ^
threading=multi ^
stdlib=stlport-5.2.1 ^
link=shared ^
runtime-link=shared
:debug
echo building boost in debug shared library
bjam ^
--with-system ^
--with-chrono ^
--with-date_time ^
--with-thread ^
--with-atomic ^
toolset=msvc-9.0~CEPlatform ^
define=_STLP_DEBUG=1 ^
variant=debug ^
threading=multi ^
stdlib=stlport-5.2.1 ^
link=shared ^
runtime-link=shared
goto exit
:exit
pause
Я изменил user-config.jam согласно этой ссылке: [http://stackoverflow.com/questions/15906901/build-boost-c-wince/15939679#15939679][1]
Я могу запустить приложение с надстройкой в режиме выпуска с некоторыми проблемами:
повышение :: this_thread :: sleep_for (повышение :: хроно :: секунд (1));
приведет к сбою приложения в режиме выпуска: я не могу приложение, если предыдущий статус отсутствует. Кажется, что некоторые зависимости потеряны. Я использовал средство обхода зависимостей, и все зависимости разрешены (COREDLL.DLL, STLPORT.5.2.DLL, BOOST_SYSTEM-VC90-MT-P-1_53.DLL, BOOST_THREAD-VC90-MT-P-1_53.DLL, BOOST_DATE_TIME-VC90- МТ-Р-1_53.DLL).
В режиме отладки все хуже: я не могу запустить приложение, если я включаю заголовок boost (boost / thread.hpp, boost / chorono.hpp). Кажется снова, что некоторые DLL отсутствуют, но с ходунком зависимостей все кажется в порядке. Отсутствует отсутствующая DLL … Связанная DLL:
COREDLL.DLL, STLPORTSTLD.5.2.DLL, BOOST_SYSTEM-VC90-MT-GDP-1_53.DLL, BOOST_THREAD-VC90-MT-GDP-1_53.DLL, BOOST_DATE_TIME-VC90-MT-GDP-1_53.DLL
Я что-то пропустил. У кого-нибудь есть идея?
CE имеет ограничение в 32 символа длины имени DLL при загрузке с неявной загрузкой. Сумасшедший, что это все еще не исправлено в CE (не говоря уже о правильном сообщении об ошибке), или обойти в Boost Подход, который мы использовали на работе, заключался в том, чтобы использовать «bsystem» вместо «boost_system» (аналогично «bthread», «bregex» и т. Д.) #Ifdef UNDER_CE. Может быть, мы также удалили «-mt», так как однопоточный код не поддерживается в CE, но я должен был проверить источники.
Опции, возможно, были изменены в более поздней версии Boost.
Я использую —layout = system option и макрос BOOST_AUTO_LINK_NOMANGLE, и они работают.
Я использую Boost 1,55.