una librerias libreria estatica dev crear con como biblioteca agregar c++ visual-studio-2010 boost linker

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:

  1. No quiero que los usuarios de la biblioteca tengan que preocuparse por enlazar en boost.
  2. 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).