es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo sabe Visual Studio qué biblioteca enlazar si existen tanto bibliotecas estáticas como dinámicas?

Cuando se realiza la vinculación con bibliotecas externas, si tanto las bibliotecas estáticas como las bibliotecas dinámicas existen en la misma carpeta, ¿cuál biblioteca enlazará Visual Studio?

Como ejemplo, para la biblioteca boost filesystem, el archivo de biblioteca estática x64 se llama libboostfilesystem-vc142-mt-x64-177.lib y los archivos de biblioteca dinámica x64 se llaman boostfilesystem-vc142-mt-x64-177.dll y boostfilesystem-vc142-mt-x64-177.lib. Todos estos archivos se encuentran en la misma carpeta. ¿Cómo sabe el enlazador de Visual Studio cuál usar? ¿Se determina mediante la bandera Runtime Library (/MT y /MD)?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Al enlazar con bibliotecas externas, el enlazador de Visual Studio considera los siguientes factores para decidir qué biblioteca enlazar:

    • Si el proyecto está configurado para enlazar estáticamente, preferirá las bibliotecas estáticas sobre las dinámicas.
    • Si tanto las bibliotecas estáticas como las dinámicas existen en la misma carpeta, y el proyecto está configurado para enlazar de forma dinámica, preferirá el archivo de biblioteca dinámica importada (.dll) sobre el archivo de biblioteca estática (.lib).
    • Si hay varias bibliotecas estáticas o dinámicas presentes, el enlazador elige aquella que coincida con la arquitectura, configuración y versión especificada en la configuración del proyecto.

    En el caso de la biblioteca boost filesystem, si el proyecto está configurado para enlazar estáticamente, el enlazador de Visual Studio utilizará el archivo de biblioteca estática (libboost_filesystem-vc142-mt-x64-1_77.lib) e ignorará los archivos de biblioteca dinámica (boost_filesystem-vc142-mt-x64-1_77.dll y boost_filesystem-vc142-mt-x64-1_77.lib). Si el proyecto está configurado para enlazar dinámicamente, utilizará el archivo de biblioteca de importación (boost_filesystem-vc142-mt-x64-1_77.lib) para resolver los símbolos en tiempo de compilación y el archivo DLL (boost_filesystem-vc142-mt-x64-1_77.dll) para cargar el código en tiempo de ejecución.

    La indicación de la biblioteca de tiempo de ejecución (/MT o /MD) determina si el proyecto debe enlazar con la versión estática o dinámica de las bibliotecas de tiempo de ejecución de C/C++. No afecta la elección de las bibliotecas externas enlazadas por el proyecto.

Comments are closed.