En MS Visual C++ 2010Cómo vincular Boost en una biblioteca estática dependiente
Tenía un único proyecto C++ en mi solución que utilizaba boost y funcionaba perfectamente.
Luego decidí convertir este proyecto en una biblioteca estática y crear un nuevo proyecto que depende de esta biblioteca estática.
Ahora, mi biblioteca estática convertida crea sin errores y advertencias (compilador y vinculador) pero el nuevo proyecto compila pero no enlaza.
que estoy recibiendo:
1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_45.lib'
Como prueba añadí la ruta completa a las opciones del vinculador para esta biblioteca ... y luego se quejó de
1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_45.lib'
Ahora he añadido complete las rutas a todas las bibliotecas y ahora se compila y ejecuta.
No estoy feliz con esta solución porque:
- no quiero que los usuarios de la biblioteca para tiene que preocuparse acerca de la vinculación en impulso.
- Es desordenado
Sé que una respuesta sería la creación de un archivo DLL, pero hay una manera de hacer esto de forma estática y mantener la vinculación a mi nivel biblioteca estática.
Editar:
Si le digo al enlazador .exe hacer caso omiso de las librerias a impulsar de manera explícita entonces todo está bien, excepto el .exe no debería tener que preocuparse por impulso en absoluto.
/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"
Esta respuesta me llevó a una solución correcta. Definí BOOST_ALL_NO_LIB y agregué manualmente las bibliotecas de impulso estático al Bibliotecario. Mi proyecto .exe ahora no necesita saber acerca de BOOST, que era el objetivo. Es una pena que el enlace BOOST automático parezca propagarse a través de DefaultLibs. – T33C
Nota especial para 'Boost.Thread' Puede necesitar usar la opción' BOOST_THREAD_USE_LIB'. Ver http://shoddykid.blogspot.in/2008/07/getting-started-with-boost.html –
Tengo el mismo problema ... Lo resolví usando el preprocesador BOOST_ALL_NO_LIB y enlazando explícitamente libs en mi proyecto agregando el directorio de boost libs y agregue las únicas librerías usadas a Linker-> Input-> Aditional Dependencies. De forma predeterminada, los encabezados de impulso montan el nombre de libs en el encabezado. Esto se puede verificar con el uso del preprocesador BOOST_LIB_DIAGNOSTIC. –