c++ - Compile Boost 1.47 para Windows CE
windows-ce (3)
En realidad, no tienes que usar la compilación de refuerzo para aumentar la potencia. Construí parte de boost utilizando un script SCONS para un proyecto donde necesitaba más control sobre las opciones de compilación. Funcionó bastante bien Fue algo como ésto:
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'')
Este script SCons solo busca los archivos fuente en los módulos de impulso listados y compila con el compilador predeterminado. Paso en la ruta al directorio fuente de refuerzo a través de la variable de entorno BOOST_SOURCE.
Esto podría funcionar para Windows CE, ya que le daría más control sobre el proceso de compilación. También podría hacer algo similar con make o nmake.
La moraleja de la historia es que construir impulso sin usar bjam / BoostBuild no es tan difícil.
En realidad, hay un poco de información sobre las personas que intentan construir las bibliotecas de Boost para Windows CE, pero nadie ha informado de éxito o incluso ha dado los pasos necesarios para hacerlo. Con los dos últimos lanzamientos (1.46 y 1.47) las notas de la versión han mencionado que uno de sus compiladores de prueba era "Visual C ++, Windows Mobile 5, con STLport: 9.0", lo que parece implicar que se ha logrado el éxito (como nota al margen el compilador dado es interesante ya que el último STLPort que he podido descargar es 5.2.1. ¿Me falta algo?).
Las publicaciones que he encontrado parecen girar en torno al archivo que se encuentra aquí: http://www.boost.org/development/tests/trunk/VeecoFTC.html . El caso es que, sinceramente, no sé cómo usarlo. Pude construir STLPort para Windows CE, pero siguiendo la guía de Boost Getting Started ( http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html ) me quedo atorado en Boost.Build escenario. ¿Debo configurar en este punto para compilar para CE? Simplemente no sé qué pasos tomar y agradecería alguna orientación.
Estos son los pasos que he seguido hasta ahora:
- Compila STLPort para Windows CE (la documentación era bastante decente, esto no resultó demasiado difícil).
- Instale Boost.Build de acuerdo con la Guía de introducción. Estoy un poco inestable en este paso, ya que el archivo bootstrap.bat parece ser específico de "ntx86" y "ntx86_64". ¿Ya he jodido?
En este punto, suponiendo que he hecho las cosas correctamente, necesito ejecutar b2 con algo así como
b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage
Supongo que mi directorio de compilación es el prefijo que utilicé para Boost.Build, el tipo de compilación y el escenario seguirán siendo los mismos, pero no sé qué nombre de conjunto de herramientas usar. El archivo VeecoFTC tiene múltiples entradas para msvc y stlport. Quité las dos entradas que NO SE RELACIONARON con "wm5", pero cuando compilo con el siguiente comando
b2 --build-dir=C:/boost-build toolset=msvc --build-type=complete stage
Me sale un montón de errores como:
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.
De hecho, ese archivo no existe, pero has_icu_test.obj.rsp existe allí. ¿Me estoy perdiendo de algo? ¿Estoy incluso en el camino correcto?
ACTUALIZAR:
Como no puedo hacer que Boost.Build trabaje y no recibo amor en la lista de correo de Boost.Build, pasé a probar el sistema de compilación de CMake para Boost: http://gitorious.org/boost/cmake . Estoy usando esto junto con CEgcc (estoy mucho más familiarizado con Linux que con Windows) y me aparece el siguiente error:
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 es parte de las banderas C y CXX. El problema es que BOOST_PLATFORM_CONFIG no está definido por boost / config / select_platform_config.hpp. ¿Qué debería definirse esto para Windows CE? Pensé que debería ser boost / config / platform / win32.hpp (que luego definiría BOOST_HAS_WINTHREADS, que resolvería el error anterior). ¿Cómo pueden las notas de la versión reclamar que esto funciona cuando select_platform_config.hpp no parece manejar casos de Windows CE? Si BOOST_PLATFORM_CONFIG realmente necesita ser boost / config / platform / win32.hpp, entonces necesito definir _WIN32, WIN32 o WIN32. Mi primera reacción es que ninguno de estos debería usarse para compilar para CE. Además, el archivo VeecoFTC no contiene ninguno de estos. ¿Como funciona?
Este es el tipo de error que vería si la configuración del conjunto de herramientas msvc tiene una ruta incorrecta hacia donde está instalado el conjunto de herramientas. He visto esos errores en máquinas de Windows de 64 bits, donde las herramientas suponen que el compilador está instalado en "C: / Archivos de programa" pero en realidad está en "C: / Archivos de programa (x86)"
Verifique la configuración del conjunto de herramientas y asegúrese de que coincida con la ubicación donde está instalado el SDK.
He compilado con éxito Boost.Thread, Boost.Regex, Boost.System, Boost.Chrono y Boost.Atomic para Windows CE 6.0 en una plataforma x86.
El trabajo principal fue hacer que WinCE sea más compilador de ANSI C. Cambié un poco STLPort e integé con la función C que faltaba. Luego construí boost con STLPort.
Mira el siguiente enlace que publiqué:
http://.com/questions/15906901/build-boost-c-wince
http://.com/questions/16016637/boost-c-and-windows-ce-6-0
http://.com/questions/15959877/windows-ce-6-0-and-runtime-link-to-debug-dll-mdd
http://.com/questions/11079337/wince-5-0-using-stlport-void-operator-newsize-t-void-already-has-a-body/15814730#15814730