2011-01-06 10 views
9

He corrió bjam.exe --build-dir="C:\build-boost" --build-type=minimal msvc stage¿Tengo bibliotecas de impulso estáticas o dinámicas?

y ahora tengo bibliotecas .LIB con estas cabeceras, por ejemplo

libboost_serialization-vc100-mt 
libboost_serialization-vc100-mt-1_45 
libboost_serialization-vc100-mt-gd 
libboost_serialization-vc100-mt-gd-1_45 

Creo que estos deben ser bibliotecas estáticas para depurar y liberar la versión. Cuando ejecuto el compilador con Multi-threaded Debug (/MTd) da un error LNK1104: cannot open file 'libboost_serialization-vc100-mt-sgd-1_45.lib' Está buscando uno con -sgd

donde estoy yendo mal?

+1

Tal vez puedas intentar crear usando "--build-type = complete" ya que construirá todas las variantes admitidas de las bibliotecas. Ver la sección "5.3.4 Invocar bjam" en http://www.boost.org/doc /libs/1_42_0/more/getting_started/windows.html – yasouser

Respuesta

4

Tiene las versiones dinámicas. Los estáticos están delimitados por tener la "s" en el nombre. Asegúrese de haber especificado link=static en la línea de comando bjam. Si no, tendrás que reconstruir para hacer las versiones estáticas.

+0

¿supone que me dará '.dlls' al final? Solo tengo '.libs' en la carpeta de escenario. – snoz

+0

@snoz: Entonces está buscando en la carpeta incorrecta. En los cuadros de Windows, las bibliotecas se tratan como artefactos de compilación, que luego se copian en la carpeta de salida cuando se completa la compilación de cada biblioteca. Deberá encontrar dónde se encuentra el directorio que contiene tanto las dlls como las libs. –

2

aquí es cómo descomponerlo

libboost_serialization-VC100-mt-SGD-1_45.lib

lib- if boost library starts with lib then its a static library , shared library do not start with lib prefix. Also static library will have a '-s' in the name. 

mt- multi-threaded , obtained by specifying threading=multi when you ran bjam or b2.This is the default threading. 

g- use debug libraries for building the code 
d- build a debug version of your code 

Así que su compilador es la búsqueda de multi-hilo estática depurar biblioteca (mt-sgd) como ejecutó con/MTd (Crea un archivo ejecutable multiproceso de depuración utilizando LIBCMTD.lib). Supongo que de forma predeterminada debe estar buscando una biblioteca estática. Si quieres una biblioteca dinámica, insertar estas líneas en su código o definir una macro

#define BOOST_ALL_DYN_LINK 
20

Algo que está un poco confuso es que hay dos opciones 'estáticos' para la construcción de impulso con MSVC.

B2.exe toma la opción link=static que indica a impulso que desea vincular IT estáticamente. Si está compilando su proyecto de VC con/MT o/MTd, también necesitará usar la opción runtime-link=static para decirle a boost que se vinculará estáticamente a las bibliotecas de tiempo de ejecución de VC.

Es el segundo runtime-link=static que pone -s en el nombre .lib.

Mi línea de comandos para la construcción de impulso era

b2.exe --toolset=msvc variant=release link=static threading=multi runtime-link=static stage 
+0

Estoy teniendo muchos problemas con esto, pero con un montón de dependencias diferentes, no solo de impulso. ¡Creo que acabas de hacer que haga clic para mí! (3 años después). –

Cuestiones relacionadas