LD_LIBRARY_PATH vs LIBRARY_PATH

Estoy construyendo un progtwig simple de C ++ y quiero sustituir temporalmente una biblioteca compartida suministrada por el sistema por una versión más reciente de la misma, para desarrollo y prueba.

Intenté configurar la variable LD_LIBRARY_PATH pero el enlazador (ld) falló con:

/ usr / bin / ld: no se puede encontrar -lyaml-cpp

Esperaba que eso funcionara, porque de acuerdo con la página ld man:

El vinculador utiliza las siguientes rutas de búsqueda para localizar las bibliotecas compartidas requeridas: … Para un vinculador nativo, el contenido de la variable de entorno “LD_LIBRARY_PATH” …

Luego intenté configurar LIBRARY_PATH, y funcionó.

De acuerdo con el manual de GCC:

El valor de LIBRARY_PATH es una lista de directorios separados por dos puntos, muy similar a PATH. Cuando se configura como comstackdor nativo, GCC prueba los directorios especificados al buscar archivos enlazadores especiales, si no puede encontrarlos usando GCC_EXEC_PREFIX. La vinculación con GCC también utiliza estos directorios cuando busca bibliotecas ordinarias para la opción -l (pero los directorios especificados con -L son los primeros).

Como sugiere el manual (GCC), LIBRARY_PATH funciona porque me enlace con GCC.

Pero..

  • Como me enlace con gcc, ¿por qué ld se está llamando, como sugiere el mensaje de error?
  • ¿De qué sirve tener dos variables que sirvan para el mismo propósito? ¿Hay otras diferencias?

LIBRARY_PATH es utilizado por gcc antes de la comstackción para buscar directorios que contengan bibliotecas estáticas que deben estar vinculadas a su progtwig.

LD_LIBRARY_PATH es utilizado por su progtwig para buscar directorios que contienen bibliotecas compartidas después de que se haya comstackdo y vinculado correctamente.

EDITAR: Como se señala a continuación, sus bibliotecas pueden ser estáticas o compartidas. Si es estático, el código se copia en su progtwig y no necesita buscar la biblioteca después de comstackr y vincular su progtwig. Si su biblioteca es compartida, entonces debe estar vinculada dinámicamente a su progtwig y ahí es cuando LD_LIBRARY_PATH entra en juego.

LD_LIBRARY_PATH se busca cuando se inicia el progtwig, LIBRARY_PATH se busca en el tiempo del enlace.

advertencia de los comentarios :

  • Al vincular bibliotecas con ld (en lugar de gcc o g++ ), las LD_LIBRARY_PATH entorno LIBRARY_PATH o LD_LIBRARY_PATH no se leen.
  • Al vincular bibliotecas con gcc o g++ , se LIBRARY_PATH la variable de entorno LIBRARY_PATH (consulte la documentación ” gcc utiliza estos directorios cuando busca bibliotecas comunes” ).

Como me enlace con gcc, ¿por qué ld se está llamando, como sugiere el mensaje de error?

gcc llama a ld internamente cuando está en modo vincular.