Estoy construyendo un programa C ++ simple y quiero sustituir temporalmente una biblioteca compartida suministrada por el sistema con una versión más reciente del mismo, para desarrollo y pruebas.
Intenté configurar la variable LD_LIBRARY_PATH pero el enlazador (ld) falló con:
/ usr / bin / ld: no se puede encontrar -lyaml-cpp
Esperaba que funcionara porque de acuerdo con la página de manual de ld:
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 eso funcionó.
De acuerdo con el manual de GCC:
El valor de LIBRARY_PATH es una lista de directorios separados por dos puntos, al igual que PATH. Cuando se configura como un compilador nativo, GCC prueba los directorios así especificados cuando busca archivos vinculadores especiales, si no puede encontrarlos usando GCC_EXEC_PREFIX. Vincular usando GCC también usa estos directorios cuando busca bibliotecas ordinarias para la opción -l (pero los directorios especificados con -L son lo primero).
Como sugiere el manual (GCC), LIBRARY_PATH funciona porque me conecto con GCC.
Pero..
- Como me conecto con gcc, ¿por qué se llama a ld, como sugiere el mensaje de error?
- ¿Cuál es el punto de tener dos variables que tengan el mismo propósito? ¿Hay otras diferencias?

LIBRARY_PATHse usa para buscar directorios que contienen bibliotecas estáticas Y dinámicas, en lugar de solo bibliotecas estáticas.LIBRARY_PATHse buscan bibliotecas (estáticas o dinámicas) en tiempo de compilación yLD_LIBRARY_PATHse buscan bibliotecas dinámicas en tiempo de ejecución. Por supuesto, en tiempo de ejecución no necesita buscar bibliotecas estáticas.LD_LIBRARY_PATHse busca cuando se inicia el programa,LIBRARY_PATHse busca en el momento del enlace.advertencia de los comentarios :
ld(en lugar degccog++), las variables de entornoLIBRARY_PATHoLD_LIBRARY_PATHno se leen.gccog++,LIBRARY_PATHse lee la variable de entorno (consulte la documentación "gccutiliza estos directorios cuando busca bibliotecas ordinarias" ).fuente
ldpor sí mismo no se ve para las bibliotecas, ya sea enLIBRARY_PATHoLD_LIBRARY_PATH. Es sólo cuandogccinvocaldqueLIBRARY_PATHse acostumbra. (Aprendí esto de la manera difícil.)gcc llama a ld internamente cuando está en modo de enlace.
fuente