2011-02-08 11 views
11

Estoy compilando impulso con bjam en Windows 7 (64 bits-debería ser irrelevante)Compilación de impulso con zlib

D:\development\boost\boost_1_44\libs\iostreams\build>bjam stage^
--toolset=msvc-10.0 link=static^
--build-type=complete^
-s ZLIB_SOURCE=C:\zlib125-dll^
-s ZLIB_LIBPATH=C:\zlib125-dll\lib^
-s ZLIB_INCLUDE=C:\zlib125-dll\include^
-s ZLIB_BINARY=C:\zlib125-dll 

Pero solo me dan

stage/libboost_iostreams-vc100-mt-gd-1_44.lib 
bin.v2/libs/iostreams/build/msvc-10.0/debug/threading-multi/boost_iostreams-vc100-mt-gd-1_44.dll 
bin.v2/libs/iostreams/build/msvc-10.0/debug/threading-multi/boost_iostreams-vc100-mt-gd-1_44.lib 

bin.v2/libs/iostreams/build/zlib/msvc-10.0/debug/threading-multi/boost_zlib-vc100-mt-gd-1_44.dll 
bin.v2/libs/iostreams/build/zlib/msvc-10.0/debug/threading-multi/boost_zlib-vc100-mt-gd-1_44.lib 

pero stage/libboost_zlib-vc100-mt-gd-1_44.lib falta.

¿Estoy compilando algo mal?

cuando trato de ejecutar mi proyecto que funcionaba bien con las bibliotecas de impulsar y aumentar la auto-compilado flujo de entrada/sale el siguiente error cuando se incluyo el material impulso zlib

6>LINK : fatal error LNK1104: cannot open file 'libboost_zlib-vc100-mt-gd-1_44.lib' 

¿Alguien sabe lo que estoy haciendo ¿incorrecto?

Respuesta

6

Me llevó un tiempo conseguir que Boost compilara correctamente con el soporte de zlib. Hice un blog sobre él here.

Para resumir, el problema que encontré fue que en algún momento zlib ya no incluía un archivo fuente gzio.c. El archivo de atasco para el sistema de compilación Boost (jamfile.v2) tenía una referencia al módulo gzio que provocó su error. La solución fue eliminar esa referencia antes de construir.

No estoy seguro de que esta respuesta sea relevante por más tiempo, a menos que intente construir una versión anterior de Boost. Creo que el problema de compilación original se ha solucionado en versiones más recientes de Boost.

+0

probado con los parámetros de guiones, pero aún ninguna suerte. solo se compilan más versiones de iostream, pero no hay bibliotecas estáticas de zlib – cppanda

+3

Si bien esto puede responder teóricamente a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) incluir las partes esenciales de la respuesta aquí, y proporcione el enlace para referencia. –

14

Me las arreglé para construirlas mediante la opción
-sZLIB_SOURCE = "C: \ zlib-1.2.5"
cuenta que no hay espacio después de la -s y las comillas alrededor de la ruta.

+5

Solo para aclararlo: tampoco puede tener espacios en el camino. Eso es muy importante y, por supuesto, totalmente indocumentado. – user673679

+0

@ user673679 Me tomó dos horas construirlo porque tenía espacios en el camino. Odio la documentación de impulso. Gracias por publicar esta sugerencia. – theV0ID

+1

¡oh sí, eso funcionó! – codekiddy

3

Tuve el mismo problema (Windows 7 Visual Studio) y creo que el problema no está en la forma de aumentar la potencia.

1) Como ecotax, no debe haber espacio después de -s 2) Cuando se ejecuta bjam, agregue la marca --debug-configuration. Si en la salida no se ve errores y se imprime algo así como

Aviso: iostreams: usando zlib prebuilt

entonces ha encontrado su copia zlib, que es bueno.

3) Observe que la biblioteca libboost_zlib-vc100-mt-gd-1_44.lib no se debe producir.

4) Cuando compila su aplicación en Visual Studio, parece que Boost.Iostreams auto-linking todavía quiere libboost_zlib-vc100-mt-gd-1_44.lib e informa de un error de enlace.

Lo que funcionó para mí (fundé googlear) fue añadir a las definiciones de preprocesador la bandera

BOOST_IOSTREAMS_NO_LIB

+1

Funciona para mí, pero después de corregir las definiciones del preprocesador, obtuve estos errores. error LNK2001: símbolo externo no resuelto "int const boost :: iostreams :: zlib :: default_compression". ¿Tiene alguna idea? –

+0

Esto significa que bjam no encontró el camino a zlib y iostreams fue construido sin soporte zlib. Debe proporcionar ZLIB_INCLUDE y ZLIB_LIBPATH al bjam con las rutas correctas con su versión de zlib. –

1

Para los chicos, que organización, el uso de pre-compilados 'zlib'. Estos pasos que hay que hacer:

  • descargar y generar 'zlib'
  • Run with-b2.exe iostreams -s ZLIB_BINARY = zlib -s ZLIB_INCLUDE = C: /Sys/zlib-1.2. 7/Include -s ZLIB_LIBPATH = C: /Sys/zlib-1.2.7/Lib versión

Actualice las rutas a su carpeta de instalación local zlib. De esta forma, Boost insertará en libboost_iostreams los archivos gzip.cpp, zlib.cpp. No se generará libboost_zlib.

  • En el archivo de origen añadir estas líneas (en algún lugar stdafx.hy, antes de incluir cabeceras Boost.Iostream):

-

#ifdef _DEBUG 
    #define BOOST_ZLIB_BINARY zlibd 
#else 
    #define BOOST_ZLIB_BINARY zlib 
#endif 

Esto le dice que no lo hace desea vincular con libboost_zlib, pero en su lugar proporciona una biblioteca zlib precompilada.

  • En la configuración de su proyecto, proporcione la ruta al archivo zlib.lib.
  • Debe compilar y vincular ahora.
+0

Funcionará, pero tengo la sensación de que la solución correcta es la siguiente. Primero haga 'b2.exe --with-iostreams -s ZLIB_INCLUDE = [otras opciones]'. Es decir, omita los modificadores ZLIB_BINARY y ZLIB_LIBPATH ya que se ignoran. Luego solo vincula tu proyecto con las bibliotecas zlib de forma manual. Sin embargo, soy demasiado perezoso para investigarlo adecuadamente :) –

-1

set ZLIB_SOURCE="c:\zlib"

set ZLIB_INCLUDE="c:\zlib"

.\b2

.\bjam no va a construir, pero .\b2 construirá la biblioteca: s tage/libboost_zlib-vc100-mt-gd-1_44.lib

Cuestiones relacionadas