Librerías en visual Studio c++

publicado por: Anonymous

A la hora de crear un proyecto, si usamos otras librerías que no pertenecen a la STL, se deben vincular de forma manual. Pero, ¿por qué se debe vincular los archivos .lib, los .h y los .dll? Se supone que los .lib son cabeceras estáticas, ¿no debería ser suficiente con vincular esos archivos para poder hacer los #include?

Quiero decir: si queremos vincular la librería allegro, por ejemplo, no debería bastar con hacer un #include y la ruta de la librería .h? ¿Por que además hay que vincular todos esos archivos?

solución

El proceso que lleva de un código C++ cualquiera a un ejecutable es el siguiente:

  • preprocesador: resuelve las macros, includes y otras directivas.
  • compilación: se coge cada fichero de implementación (*.cpp) y se genera el código objeto correspondiente.
  • enlazado: se cogen todos los código objeto y se integran en un mismo fichero. Mientras se hace este proceso se calculan los saltos definitivos en el código para llamar a las funciones correctamente.

El preprocesador no necesita dependencias externas ya que se preocupa bien poco del estado del código… su única misión es realizar sustituciones en el código.

En compilador necesita las cabeceras para conocer los tipos, su tamaño y la estructura de las clases. Esta información es imprescindible para que el compilador sepa, por ejemplo, a qué función debe llamar en cada momento.

El enlazador necesita las librerías estáticas y dinámicas para establecer los vínculos definitivos (las dinámicas pueden ser opcionales) ya que es en dichas librerías donde se encuentra el código binario que va a formar parte del ejecutable final.

Así pues, las cabeceras son necesarias para el proceso de compilación y las librerías para el proceso de enlazado.

pero… ¿No se podrían usar las librerías precompiladas y DLLs para el proceso de compilación también? lamentablemente no y la razón es que estas librerías no contienen información sobre las variables miembro de las clases (entre otras cosas), por lo que dificilmente van a ser de utilidad durante el proceso de compilación.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *