c++ - librerias - Cómo enlazar Boost en una biblioteca estática dependiente
libreria estatica c++ (3)
En MS Visual C ++ 2010
Tenía un solo proyecto de C ++ en mi solución que usaba boost y funcionó perfectamente.
Entonces decidí convertir este proyecto en una biblioteca estática y crear un nuevo proyecto que dependa de esta biblioteca estática.
Ahora, mi biblioteca estática convertida se compila sin errores ni advertencias (compilador y vinculador) pero el nuevo proyecto compila pero no enlaza.
Estoy obteniendo:
1>LINK : fatal error LNK1104: cannot open file ''libboost_thread-vc100-mt-1_45.lib''
Como prueba, agregué la ruta completa del directorio a las opciones del enlazador para esta biblioteca ... y luego me quejé
1>LINK : fatal error LNK1104: cannot open file ''libboost_date_time-vc100-mt-1_45.lib''
Ahora he agregado rutas completas a todas las bibliotecas y ahora se construye y se ejecuta.
No estoy contento con esta solución porque:
- No quiero que los usuarios de la biblioteca tengan que preocuparse por enlazar en boost.
- Es desordenado
Sé que una respuesta sería crear un DLL, pero hay una manera de hacerlo de forma estática y mantener el enlace en mi nivel de biblioteca estática.
Editar:
Si le digo al vinculador .exe que ignore explícitamente las librerías de impulso, entonces todo está bien, excepto que el .exe no debería tener que preocuparse por el impulso.
/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"
¿Construiste la biblioteca de impulso? Hay ciertas bibliotecas en Boost que necesitan ser compiladas. En caso de que no lo haya hecho, consulte " Cómo comenzar en Windows " para saber cómo construir la biblioteca Boost.
EDIT-1: Boost puede construirse tanto como bibliotecas estáticas como de carga dinámica (dll).
EDIT-2: Si ya ha creado Boost, entonces la respuesta de @Daniel Gehriger le dice cómo agregarlo en VS.
Aparentemente no necesitas los .libs, ya que tu exe también se enlaza sin ellos. Parece que estás usando métodos y clases que solo aumentan el encabezado. Así que simplemente dí un impulso para deshabilitar la vinculación automática definiendo el símbolo del preprocesador BOOST_ALL_NO_LIB en su proyecto.
Si quieres hacer que tu .lib sea innecesariamente grande al incluir todo el impulso, esta pregunta parece tener una respuesta (que nunca intenté realmente): vincular bibliotecas estáticas a otras bibliotecas estáticas
Cuando construyas tu biblioteca, puedes incluir las bibliotecas boost en la tuya. Para hacerlo, en la página de propiedades Librarian > General
VisualStudio, enumere sus bibliotecas de impulso como Additional Dependencies
.
Sin embargo, puede haber un problema si sus clientes usan el impulso y se vinculan estáticamente (especialmente una versión diferente a la que está usando).