2009-11-26 20 views
6

Descargué la fuente para Launchy y estoy tratando de compilarla en Visual Studio 2005. El proyecto Launchy se compila utilizando VC7, así que tuve que actualizar los archivos del proyecto a VC8 y ese proceso pareció ir bien . Sin embargo, Launchy también usa las libs Boost 1.33.1 y lo que he creado son las libs de Boost 1.41.0 (utilería de Boost para hacer que las libs más recientes sean mucho más fáciles de compilar), así que también actualicé el proyecto para apuntar a mi nuevo Boost libs instala. Ahora me sale el siguiente error de vinculador:Boost lib error del enlazador Visual C++

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib' 

que tenía un aspecto en el directorio lib Boost y la coincidencia más cercana que pude encontrar es ...

libboost_regex-vc80-mt-gd-1_41.lib 

Aviso a los desaparecidos 's'. No entiendo cuál es la diferencia en libs, y si Visual Studio está buscando algo incorrecto o si mi proceso de compilación Boost falló al compilar las librerías correctas. ¿Alguien puede señalarme en la dirección correcta?

Como experimento, hice una copia de la biblioteca de expresiones regulares que tengo y la renombré a lo que el vinculador está buscando. Eso me da una larga lista de errores de enlace sobre los símbolos que ya se están definidas en MSVCRTD.LIB tales como los siguientes:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in libcmtd.lib(typinfo.obj) 

voy a tratar de construir el Boost 1.33.1 libs y señalar mi archivo de proyecto en ese Launchy en lugar. Pero aún me gustaría saber qué está mal con mis libs de Boost 1.41.0.

Editar: He encontrado una referencia a lo que in the Boost docs libs la 's' son:

Use this library when linking statically to the C++ standard library and compiler runtime support libraries.

lo que parece que libs la 's' son los correctos. Ahora solo tengo que descubrir cómo construirlos.

Solución: Pude construir las libs de impulso faltantes con la siguiente línea de comandos.

bjam --build-type=complete msvc stage 

Lo ejecuté después de ejecutar boostrap.bat en el directorio donde boost boost vive.

+0

Si no quiere meterse con la construcción de ellos, puede obtenerlos aquí: http://boost.teeks99.com – teeks99

Respuesta

10

La diferencia es clearly described in Boost docs - "mt-sgd" significa "depuración, bibliotecas de tiempo de ejecución enlazadas estáticamente, multiproceso, con símbolos de depuración". "mt-gd" es el mismo, pero utilizando bibliotecas de tiempo de ejecución vinculadas dinámicamente (es decir, msvcrtd.lib en lugar de libcmtd.lib).

Cambie la configuración del proyecto para usar la vinculación CRT dinámica (es decir,/MDd en lugar de/MTd), o cree Boost mediante la vinculación estática; la mezcla no funcionará correctamente.

3

¿Qué comando usó para generar impulso? intente especificar build-type = complete. Normalmente también debería compilar las libs.

+0

Voy a intentarlo, gracias. Creo que lo construí sin especificar el tipo de construcción. – Parappa

+0

¡Está funcionando! Gracias de nuevo. – Parappa

+0

No funciona para mí. las s-bibliotecas no están construidas. boost 1.54 – Max

Cuestiones relacionadas