Vinculación

En un proyecto de C++, el paso de vinculación se realiza después de que el compilador compile el código fuente en archivos de objeto (*.obj). El enlazador (link.exe) combina los archivos de objeto en un único archivo ejecutable.

Las opciones del enlazador se pueden establecer dentro o fuera de Visual Studio. En Visual Studio, se accede a las opciones del enlazador al hacer clic con el botón derecho en un nodo de proyecto en Explorador de soluciones y al seleccionar Propiedades para mostrar las páginas de propiedades. Seleccione Enlazador en el panel izquierdo para expandir el nodo y ver todas las opciones.

Sintaxis de la línea de comandos del enlazador

Al ejecutar el enlazador fuera de Visual Studio, puede especificar la entrada de una o varias maneras:

  • En la línea de comandos
  • Al usar archivos de comandos
  • En variables de entorno

El enlazador primero procesa las opciones especificadas en la LINK variable de entorno, seguidas de opciones en el orden en que se especifican en la línea de comandos y en los archivos de comandos. Si se repite una opción con argumentos diferentes, el último procesado tiene prioridad.

Las opciones se aplican a toda la compilación. No se pueden aplicar opciones a archivos de entrada específicos.

Para ejecutar link.exe, use la siguiente sintaxis de comandos:

link arguments

Los arguments incluyen opciones y nombres de archivo que se pueden especificar en cualquier orden. Las opciones se procesan primero y después los archivos. Use uno o más espacios o pestañas para separar los argumentos.

Nota:

Solo se puede iniciar esta herramienta desde un símbolo del sistema de Visual Studio. No puede iniciarla desde un símbolo del sistema ni desde el Explorador de archivos.

Línea de comandos

En la línea de comandos, una opción consta de un especificador de opciones, ya sea un guión (-) o una barra diagonal (/), seguido del nombre de la opción. Los nombres de opción no se pueden abreviar. Algunas opciones toman un argumento, especificado después de dos puntos (:). No se permiten espacios ni pestañas dentro de una especificación de opción, excepto dentro de una cadena entre comillas de la /COMMENT opción. Especifique argumentos numéricos en notación decimal o en lenguaje C. Los nombres de opción y sus argumentos de palabra clave o nombre de archivo no distinguen mayúsculas de minúsculas, pero los identificadores como argumentos distinguen mayúsculas de minúsculas.

Para pasar un archivo al enlazador, especifique el nombre de archivo en la línea de comandos después del link.exe comando. Puede especificar una ruta de acceso absoluta o relativa con el nombre de archivo y puede usar caracteres comodín en el nombre de archivo. Si omite el punto (.) y la extensión de nombre de archivo, el enlazador asume una extensión de .obj para encontrar el archivo. El enlazador no usa extensiones de nombre de archivo ni la falta de ellos para realizar suposiciones sobre el contenido de los archivos. Determina el tipo de archivo examinandolo y lo procesa en consecuencia.

El enlazador devuelve cero para éxito (sin errores). De lo contrario, devuelve el número de error que detuvo el vínculo. Por ejemplo, si el enlazador genera LNK1104, el enlazador devuelve 1104. Por lo tanto, el número de error más bajo devuelto por el enlazador es 1000. Un valor devuelto de 128 representa un problema de configuración con el sistema operativo o un archivo .config; el cargador no cargó ni link.exec2.dll.

Archivos de comandos del vinculador

Puede pasar argumentos de línea de comandos a link.exe en forma de archivo de comandos. Para especificar un archivo de comandos en el enlazador, use la siguiente sintaxis:

link @commandfile

commandfile es el nombre de un archivo de texto. No se permite ningún espacio o tabulación entre el signo arroba (@) y el nombre de archivo. No hay ninguna extensión predeterminada; Debe especificar el nombre de archivo completo, incluida cualquier extensión. No se pueden usar los caracteres comodín. Puede especificar una ruta de acceso absoluta o relativa con el nombre de archivo. El enlazador no usa una variable de entorno para buscar el archivo.

En el archivo de comandos, los argumentos están separados por espacios o pestañas (como en la línea de comandos) y por caracteres de nueva línea.

Puede especificar todo o parte de la línea de comandos en un archivo de comandos. Puede usar más de un archivo de comandos en un link.exe comando. El enlazador acepta la entrada del archivo de comandos como si se especificara en esa ubicación en la línea de comandos. Los archivos de comandos no se pueden anidar. El enlazador devuelve el contenido de los archivos de comandos, a menos /NOLOGO que se especifique.

Ejemplo

El comando siguiente compila un archivo DLL. Pasa los nombres de los archivos de objeto y las bibliotecas en archivos de comandos independientes y usa un tercer archivo de comandos para la especificación de la /EXPORTS opción:

link /dll @objlist.txt @liblist.txt @exports.txt

El enlazador reconoce las siguientes variables de entorno:

  • LINK y _LINK_, si se define. El enlazador antepone las opciones y los argumentos definidos en la LINK variable de entorno y anexa las opciones y argumentos definidos en la variable de entorno a los argumentos de la _LINK_ línea de comandos antes de procesarlos.
  • LIB, si se define. El enlazador usa la LIB ruta de acceso cuando busca un objeto, biblioteca u otro archivo especificado en la línea de comandos o por la /BASE opción . También usa la ruta de LIB acceso para buscar un .pdb archivo denominado en un objeto . La LIB variable puede contener una o varias especificaciones de ruta de acceso, separadas por punto y coma. Una ruta de acceso debe apuntar al subdirectorio de la \lib instalación de Visual C++.
  • PATH, si la herramienta necesita ejecutarse CVTRES y no puede encontrar el archivo en el mismo directorio que link.exe sí mismo. (link.exe requiere CVTRES vincular un .res archivo). PATH Debe apuntar al subdirectorio de la \bin instalación de Visual C++.
  • TMP, para especificar un directorio al vincular OMF o .res archivos.

Consulte también

Referencia de compilación de C/C++
Opciones del enlazador MSVC
Archivos de definición de módulo (.def)
Compatibilidad del vinculador con las DLL de carga retrasada