Pregunta

Descargué la fuente para Launchy y estoy intentando construirla en Visual Studio 2005. El proyecto Launchy es Construido con VC7, tuve que actualizar los archivos del proyecto a VC8 y ese proceso pareció ir bien. Sin embargo, Launchy también usa las Boost 1.33.1 libs y lo que he creado son las Boost 1.41.0 libs ( apoyos a Boost por hacer las librerías más recientes mucho más fáciles de construir), así que también actualicé el proyecto para que apunte a mi nueva instalación de librerías de Boost. Ahora recibo el siguiente error de vinculador:

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

Eché un vistazo en el directorio lib de Boost y la coincidencia más cercana que pude encontrar es ...

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

Note los 's' que faltan. No entiendo cuál es la diferencia en libs, y si Visual Studio está buscando algo incorrecto o si mi proceso de compilación de Boost no pudo construir las libs correctas. ¿Alguien puede indicarme la dirección correcta?

Como experimento, hice una copia de la libertad de expresión regular que tengo y la renombré a lo que el vinculador está buscando. Eso me da una larga lista de errores de vinculador sobre los símbolos que ya están definidos en msvcrtd.lib, como los siguientes:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

Intentaré construir las librerías Boost 1.33.1 y apuntar mi archivo de proyecto Launchy a ese lugar. Pero aún me gustaría saber qué es lo que está mal con mis Boost 1.41.0 libs.

Editar : encontré una referencia en los documentos Boost a lo que son las librerías 's:

  

Utilice esta biblioteca cuando se vincula de forma estática a la biblioteca estándar de C ++ y las bibliotecas de soporte en tiempo de ejecución del compilador.

Así que parece que las librerías 's' son las correctas. Ahora solo tengo que descubrir cómo construirlos.

Solución : pude construir las librerías de refuerzo faltantes con la siguiente línea de comandos.

bjam --build-type=complete msvc stage

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

¿Fue útil?

Solución

La diferencia es claramente descrita en Boost docs - " mt-sgd " significa "depuración, bibliotecas de tiempo de ejecución vinculadas estáticamente, multiproceso, con símbolos de depuración". " mt-gd " es el mismo, pero utiliza 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 el enlace CRT dinámico (es decir, / MDd en lugar de / MTd), o cree Boost utilizando el enlace estático: mezclarlos no funcionará correctamente.

Otros consejos

¿Qué comando usaste para construir impulso? intente especificar build-type = complete. Normalmente, también debería construir las librerías s.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top