Ya vimos cómo compilar Boost (librería de funcionalidades para C++, en particular de threading) en Linux >>. Ahora, al igual que ActiveMQCpp, necesitamos compilarlo en Wintendo como librería estática, así es que de ésto va la cosa.
Según la documentación >> que hay un installer, pero el único que encuentro es el de boostpro >>.
En todo caso, la mayoría de la librería viene implementada en los headers, así es que en teoría es cosa de referenciarla para usar las funcionalidades básicas. Veamos.
En efecto, si creamos un proyecto con el código del Getting Started
#include <boost/lambda/lambda.hpp> #include <iostream> #include <iterator> #include <algorithm> int main() { using namespace boost::lambda; typedef std::istream_iterator<int> in; std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << " " ); }
(por puro poner código)
Basta con que especificar el include path ésto funciona
Esto es en Propiedades > Propiedades de configuración > C/C++ > General > Directorios de inclusión adicionales.
El asunto es que el módulo threading, que es el que quiero usar, es uno de los que deben ser compilados. Así es que veamos cómo se hace ésto.
Desde la consola, hay un procedimiento simplificado de compilación. Simplemente hay que situarse en el directorio de los fuentes, ejecutar
bootstrap
para preparar el Boost.Build y luego
.\b2
para compilar.
Ahora, ¿ésto estará linkeando la librería dinámicamente? Buena pregunta…
En todo caso hay que ir a Propiedades > Propiedades de configuración > Vinculador > General > Directorios de bibliotecas adicionales y pasarle el directorio stage\lib de boost.
Con ésto podemos compilar un ejemplo como el siguiente
#include <boost/thread.hpp> using namespace std; void algo(); int main() { for(int i=0;i<500;i++){ boost::thread nuevoHilo(algo); } } void algo(){ cout << "nuevo thread " << boost::this_thread::get_id() << endl; }
y funciona.
Lo único que faltaría entonces es asegurarse de poder empaquetar boost thread estáticamente.
Ésto se hace compilando con el siguiente property >>
b2 link=static
y aún funciona.
(Supondremos que el vínculo ya es estático, aunque la prueba de fuego en realidad será pasarle el ejecutable a otro PC).