2009-11-20 15 views
11

Estoy tratando de construir una aplicación que depende de Boost. Así que descargué Boost 1_41_0 a mi caja de Linux y seguí las instrucciones que se encuentran en el sitio de Boost para las variantes de Unix, http://www.boost.org/doc/libs/1_41_0/more/getting_started/unix-variants.html.Building Boost en Linux - nombres de biblioteca

Básicamente, sugieren que ejecute ./bjam install, lo que hice. La compilación se completó con éxito. Sin embargo, los nombres de la biblioteca no parecen coincidir con la convención de nomenclatura de Boost descrita en la documentación anterior, y lo que se especifica en el archivo MAKE de la aplicación que intento crear.

Noté que hay un montón de opciones que puedo especificar para bjam e intenté jugar con ellas, pero pase lo que pase, parece que no puedo hacerlo bien. Según entiendo, las bibliotecas deberían ir al directorio $ BOOST_ROOT/lib. Aquí es donde las bibliotecas se presenta, pero su nombre:

libboost_thread.a 
libboost_thread.so 
libboost_thread.so.1.41.0 

que cabe esperar que sean nombrados libboost_thread-gcc41-mt-d-1_41_0 o algo similar.

Yo probé ./bjam de tipo --build = --layout completa = etiquetado y veo:

libboost_thread.a 
libboost_thread-mt.a 
libboost_thread-mt-d.a 
libboost_thread-mt-d.so 
libboost_thread-mt-d.so.1.41.0 
libboost_thread-mt-s.a 
libboost_thread-mt-sd.a 
libboost_thread-mt.so 
libboost_thread-mt.so.1.41.0 
libboost_thread.so 
libboost_thread.so.1.41.0 

Por lo tanto, no estoy seguro de si debería simplemente hacer mi directorio etapa -L? ¿Hay alguna documentación que describa esto con más detalle?

Respuesta

7

Los nombres se cambió en 1.40.0 - ver en release notes:

Sistema

La nomenclatura predeterminado de las bibliotecas en entorno Unix ahora coincide con convenciones sistema de construcción, y no lo hace incluye varias decoraciones.

Probablemente olvidaron actualizar esta parte en la documentación de compilación.

2

Aquí hay dos variables. Primero es "instalar" vs. "etapa" (predeterminado). "instalar" copia las bibliotecas y los encabezados en un directorio -/usr/local de manera predeterminada, y luego puede eliminar el árbol de fuentes. "stage" coloca las bibliotecas en "stage/lib", y debe agregar flags "-L/stage/lib -I".

En segundo lugar --layout = versioned y --layout = system. Parece que ya has descubierto lo que hacen y, de hecho, el sistema está predeterminado desde 1.40. La guía de inicio no menciona esto, y he agregado un elemento de acción para actualizarlo. Idealmente, debería hablar con los autores de la aplicación para usar el nombre del sistema de las bibliotecas de impulso. Si eso no es posible, construir con --layout = versioned es la única opción.

1

De la documentación Boost en http://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html#library-naming, la convención es:

-mt etiqueta de roscado: indica que la biblioteca fue construida con multihilo habilitado el soporte. Las bibliotecas construidas sin soporte multihilo pueden identificarse por la ausencia de -mt.

-d Etiqueta ABI: codifica los detalles que afectan a la interoperabilidad de la biblioteca con otro código compilado.Para cada una de estas características, se añade una letra a la etiqueta:

 
Key  Use this library when: 
s linking statically to the C++ standard library and compiler runtime support libraries. 
g using debug versions of the standard and runtime support libraries. 
y using a special debug build of Python. 
d building a debug version of your code. 
p using the STLPort standard library rather than the default one supplied with your compiler. 
n using STLPort's deprecated “native iostreams” feature. 

Por ejemplo, si se construye una versión de depuración de su código para su uso con versiones de depuración de la biblioteca de ejecución estática y la biblioteca estándar STLport en “ modo iostreams nativos, la etiqueta sería: -sgdpn. Si no se aplica ninguna de las opciones anteriores, la etiqueta ABI se omite.

+1

¿Cómo se puede construir un Boost con soporte multihilo? La [Instalación] de Boost (http://www.boost.org/doc/libs/1_54_0/doc/html/bbv2/installation.html) no lo menciona. – jww

+2

Al generar boost, use: ./b2 --build-type = complete --layout = versioned Esto generará cada versión de cada biblioteca, incluidas las multiproceso. – Riot

+1

Gracias Riot. Desde [otras discusiones] (http://stackoverflow.com/questions/2293962/boost-libraries-in-multithreading-aware-mode) en Stack Overflow, parece que Boost tiene varios subprocesos de forma predeterminada. Entonces, si realizo './B2', entonces obtengo hilos múltiples sin decoraciones. No es ese el caso? – jww

Cuestiones relacionadas