Pregunta

Descubrí cómo configurar VC ++ para compilar el código en un archivo .lib en lugar de un archivo .exe, pero tengo problemas para que una lib se vincule con mis otros archivos .obj.

Aquí es cómo tengo configuradas las carpetas de la biblioteca y la aplicación. (No estoy seguro de si esto es correcto)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

y en otro lugar en el disco duro ...

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

He estado # incluyendo la biblioteca * .h archivos de los archivos cpp de mi aplicación, y todo se compila bien. Es justo cuando enlaza me aparece una lista de todos los .lib archivos que están siendo buscados, y Library.lib no está allí aunque lo tengo en la lista de los directorios de VC ++. ¿Cómo puedo conseguir que este enlace? (¿Y estoy estructurando las carpetas de la biblioteca correctamente?)

¿Fue útil?

Solución

En las propiedades del proyecto:

Propiedades de configuración - > Vinculador - > Entrada - > Dependencias adicionales

Agrégalo allí.

O, en su archivo .h para la biblioteca, agregue:

#pragma comment(lib, "Library")

Esto lo hará automáticamente por ti.

Otros consejos

Los directorios de VC ++ son la lista de ubicaciones de directorios a buscar durante la vinculación. No es una lista de bibliotecas para enlazar.

Debe agregar el archivo lib a la Dependencias adicionales del campo Vinculador de proyectos .

Para enlazar contra una biblioteca, puede:

  • Inclúyelo en Project- > Propiedades ...- > Vinculador, Input- > Dependencias adicionales  (Los directorios de VC ++ solo le permiten usar solo el nombre de .lib en lugar de la ruta completa),
  • Agrega el proyecto de la biblioteca a tu aplicación. solución (en la solución, haga clic con el botón derecho - > Agregar - > Proyecto existente ...), luego use Proyecto - > Dependencias del proyecto ..., luego verifique el proyecto de su biblioteca (asegúrese de que el proyecto de la aplicación esté seleccionado en el menú desplegable). Esta es probablemente la mejor manera de proceder si está editando ambos proyectos, ya que VC ++ reconstruirá la biblioteca si ha cambiado antes de construir su aplicación.
  • Si está seguro de que solo usará VC ++,

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (Gracias @Nils)

NB: Parece muy extraño tener la carpeta de la solución de biblioteca dentro de un directorio 'include': que están realmente diseñados para * .h (u otros archivos #include d).

Desde la línea de comando:

  

cl / EHsc {objfiles} + / link   / LIBPATH: LibraryFolder Library.lib

Donde {objfiles} + significa uno o más archivos de objeto o cpp.

VC no simplemente vincula la biblioteca si incluye el archivo de encabezado.

Tienes que decirle al enlazador que use la biblioteca. Por buenas razones: ya tienes miles de librerías en la carpeta de tu biblioteca. Si MSVC tuviera que buscarlos todos cada vez que vinculara su programa, tendría que revisar cientos de megabytes de datos.

Eso llevaría bastante tiempo, por lo tanto, no se realiza de forma predeterminada.

Para VC también puede dar una pista al vinculador dentro de su fuente. Para hacerlo, agregue la siguiente línea en algún lugar de su código fuente (el encabezado de la biblioteca puede ser un buen lugar).

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

Eso no es una plataforma independiente, pero es la forma más conveniente de vincular automáticamente una biblioteca a un proyecto utilizando MSVC.

Otra forma es simplemente agregar el vinculador a la configuración del proyecto. La información relevante se puede encontrar en la configuración del enlazador de su proyecto. No te olvides de agregar la lib a las configuraciones de lanzamiento y depuración.

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