Pregunta

Estoy construyendo un sencillo programa en C ++ y quiero sustituir temporalmente un sistema suministrado biblioteca compartida con una versión más reciente de ella, para el desarrollo y prueba.

He intentado establecer la variable LD_LIBRARY_PATH pero el enlazador (ld) que ha fallado por:

  

/ usr / bin / ld: no puede encontrar -lyaml-CPP

Yo esperaba que al trabajo porque de acuerdo a la página del manual ld:

  

El enlazador utiliza la siguiente búsqueda   caminos para localizar compartida necesaria   bibliotecas: ... Para un enlazador nativa,   el contenido de la variable de entorno   "LD_LIBRARY_PATH" ...

Entonces intentado fijar la LIBRARY_PATH, y que trabajado.

De acuerdo con el manual de GCC:

  

El valor de   LIBRARY_PATH es una lista separada por dos puntos   de directorios, al igual que PATH. Cuando   configurado como un compilador nativo, GCC   trata los directorios especificados por tanto,   en la búsqueda de enlazador especial   archivos, si no puede encontrarlos usando   GCC_EXEC_PREFIX. La vinculación utilizando GCC   también utiliza estos directorios cuando   la búsqueda de bibliotecas comunes para   La opción -l (pero directorios   especificado con -L llegado primero).

A medida que el (CCG) Manual sugiere, LIBRARY_PATH funciona porque me enlace con GCC.

Pero ..

  • Desde enlazo con gcc qué es ld ser llamado, como el mensaje de error sugiere?
  • ¿Cuál es el punto de que tiene dos variables que sirven a la misma ¿propósito? ¿Hay alguna otra diferencias?
¿Fue útil?

Solución

LIBRARY_PATH es utilizado por gcc antes de la compilación de directorios que contienen estática y buscar bibliotecas compartidas que deben estar vinculados a su programa.

LD_LIBRARY_PATH es utilizado por el programa para buscar directorios que contienen compartido bibliotecas vez que ha sido compilado y vinculado con éxito.

EDIT: Como se señala más adelante, las bibliotecas pueden ser estáticos o compartido. Si es estática entonces el código se copia en su programa y que no es necesario para buscar la biblioteca después de su programa se compila y se enlaza. Si la biblioteca es compartida entonces tiene que estar vinculada de forma dinámica a su programa y fue entonces cuando LD_LIBRARY_PATH entra en juego.

Otros consejos

LD_LIBRARY_PATH se busca cuando se inicia el programa, se busca LIBRARY_PATH en tiempo de enlace.

:

  

Desde aquí I con gcc qué ld está siendo llamado, como sugiere el mensaje de error?

gcc llama ld internamente cuando se encuentra en modo de vinculación.

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