flag - gcc compiler linux
LD_LIBRARY_PATH vs LIBRARY_PATH (3)
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.
Estoy construyendo un programa 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 compilador 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?
LD_LIBRARY_PATH
se busca cuando se inicia el programa, LIBRARY_PATH
se busca en el tiempo del enlace.
advertencia de los comments :
- Al vincular bibliotecas con
ld
(en lugar degcc
og++
), lasLD_LIBRARY_PATH
entornoLIBRARY_PATH
oLD_LIBRARY_PATH
no se leen. - Al vincular bibliotecas con
gcc
og++
, seLIBRARY_PATH
la variable de entornoLIBRARY_PATH
(consulte la documentación "gcc
utiliza estos directorios cuando busca bibliotecas comunes" ).
LIBRARY_PATH
es utilizado por gcc antes de la compilación para buscar directorios que contengan bibliotecas estáticas que deben estar vinculadas 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 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 programa y no necesita buscar la biblioteca después de compilar y vincular su programa. Si su biblioteca es compartida, entonces debe estar vinculada dinámicamente a su programa y ahí es cuando LD_LIBRARY_PATH
entra en juego.