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?
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.
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:
- Cuando se vinculan bibliotecas con
ld
(en lugar degcc
og++
), las variables de entornoLIBRARY_PATH
oLD_LIBRARY_PATH
no se leen. - Cuando se vinculan bibliotecas con
gcc
og++
, se lee la variable de entornoLIBRARY_PATH
(ver documentación "gcc
utiliza estos directorios al buscar bibliotecas ordinarias").
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.
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