c++ - libreria - Error de enlazador LNK1104 con ''libboost_filesystem-vc100-mt-s-1_49.lib''
descargar boost (5)
Ejecute el comando debajo del comando para reconstruir el impulso en estático en VS2013 x86. Indicaciones nativas del comando de herramientas.
b2 -link=static
Agregue las rutas de la biblioteca del vinculador en la ruta de enlace del proyecto en VS. Luego, reconstruye tu proyecto, el error desapareció.
Durante el proceso de vincular mi programa al módulo boost :: filesystem en el modo de lanzamiento, obtengo el siguiente error:
error LNK1104: no se puede abrir el archivo ''libboost_filesystem-vc100-mt-s-1_49.lib''
Sin embargo, en el directorio boost / stage / lib solo tengo las siguientes bibliotecas referidas al módulo del sistema de archivos:
libboost_filesystem-vc100-mt-1_49.lib
libboost_filesystem-vc100-mt-gd-1_49.lib
Mis preguntas son:
¿Por qué el VC ++ está pidiendo ''libboost_filesystem-vc100-mt-s-1_49.lib?
¿Qué propiedades de compilación / vinculación debo cambiar para que el compilador solicite libboost_filesystem-vc100-mt-1_49.lib?
ACTUALIZACIÓN: Mi solución VC2010 ++ tiene 2 proyectos que incluyen la biblioteca de impulso anterior: x es una biblioteca y y (el programa principal) que invoca a x.
- Cuando construyo x con Configuration type = Static library y RuntimeLibrary = Multi-threaded (/ MT), está bien.
- Cuando construyo y con Configuration type = Application (.exe) y RuntimeLibrary = Multi-threaded (/ MT), emite el error que indiqué, si cambio a Configuration type = Static library, construye ok, pero mi programa principal sí. extensión de lib y no el .exe esperado.
Las bibliotecas de impulso que tiene en su boost/stage/lib directory
se vinculan dinámicamente a las bibliotecas estándar de C ++. Ver la siguiente publicación:
impulsar variaciones de configuración de compilación de lib
Su código está vinculando estáticamente a las bibliotecas estándar de C ++, por lo tanto, no coincide. Intente vincular su código dinámicamente a las bibliotecas estándar. (Configuración del proyecto-> General-> Tipo de configuración)
Puede pegar los siguientes caracteres en la consola de control (win + r ---- cmd, luego ir a impulsar el directorio src, encontrar el bjam.exe) ps: hacer doble clic en bootstrap.bat puede obtener bjam.exe
bjam --toolset=msvc-1.0 --stagedir=./lib_x64 --builddir=./ address-model=32 link=static variant=release runtime-link=static threading=multi stage debug releasde
libboost_filesystem-vc100-mt-s-1_49.lib
"link=static" correspond to -s-
"threading=multi" correspond to -mt-
"runtime-link=static" correspond to lib prefix
"variant=release" make sure libboost_filesystem-vc100-mt-s-1_49.lib don''t contain -gd-
Tuve un problema similar con un proyecto reciente (heredado de un largo legado).
Aquí hay una solución de " hombre pobre " para este problema:
Reconstruya las bibliotecas de impulso con todas las variantes, para asegurarse de tener la variante correcta para sus necesidades.
Correr:
./b2 --build-type=complete
Tenga en cuenta que el aumento de tiempo de compilación obviamente será más largo con esta opción.
Esta no es una solución elegante, pero no tuve tiempo de preocuparme por averiguar qué opción exacta necesitaba para mi proyecto, así que las construí todas.
Está utilizando la opción / MT o / MTd en C/C++/Code Generation/Runtime Library
que requiere una biblioteca estática, aumenta la compilación predeterminada con la salida de biblioteca compartida. Puede cambiar la Runtime Library
a / MD o / MDd. Otra opción es recompilar boost con salida de biblioteca estática y obtendrá ''libboost_filesystem-vc100-mt-s-1_49.lib'' ..