RUTA DE LA BIBLIOTECA LD vs RUTA DE LA BIBLIOTECA


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

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

/ usr / bin/ ld: cannot find-lyaml-cpp

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

El enlazador utiliza la siguiente búsqueda rutas para localizar requerido compartido biblioteca: ... Para un enlazador nativo, el contenido de la variable de entorno "LD_LIBRARY_PATH"...

Luego intenté establecer el LIBRARY_PATH, y eso funcionó.

Según el manual del CCG:

El valor de LIBRARY_PATH es una lista separada por dos puntos de directorios, muy parecido a PATH. Cuando configurado como compilador nativo, GCC prueba los directorios así especificados cuando se busca un enlazador especial archivos, si no puede encontrarlos usando GCC_EXEC_PREFIX. Vinculación mediante GCC también utiliza estos directorios cuando buscando bibliotecas ordinarias para la opción-l (pero directorios especificado con-L viene primero).

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

Pero..

  • Puesto que enlazo con gcc porqué ld es siendo llamado, como el mensaje de error sugiere?
  • ¿Cuál es el punto de tener dos variables que sirven lo mismo propósito? Hay otros ¿diferencias?
 120
Author: Georgios Politis, 2010-11-23

3 answers

LIBRARY_PATH es usado por gcc antes de la compilación para buscar directorios que contienen bibliotecas estáticas que necesitan ser enlazadas a su programa.

LD_LIBRARY_PATH es utilizado por su programa para buscar directorios que contienen bibliotecas compartidas después de que se haya compilado y vinculado con éxito.

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

 170
Author: Naveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-23 21:08:26

LD_LIBRARY_PATH se busca cuando se inicia el programa, LIBRARY_PATH se busca en el momento del enlace.

Advertencia de comentarios:

 33
Author: F'x,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-27 15:09:53

Dado que enlazo con gcc, ¿por qué se llama a ld, como sugiere el mensaje de error?

Gcc llama a ld internamente cuando está en modo de enlace.

 10
Author: heroxbd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-02 00:36:44