Estoy compilando un programa simple en C++ y quiero sustituir temporalmente una biblioteca compartida suministrada por el sistema por una versión más reciente, para desarrollo y prueba.LD_LIBRARY_PATH contra LIBRARY_PATH
I intentado fijar la variable LD_LIBRARY_PATH pero el enlazador (ld) falló con:
/usr/bin/ld: no puede encontrar -lyaml-CPP
que esperaba que para trabajar porque de acuerdo a la página del manual ld:
el enlazador utiliza la siguiente búsqueda caminos para localizar bibliotecas compartidas requeridas: ... para un l nativa entintador, el contenido de la variable de entorno "LD_LIBRARY_PATH" ...
que después intentaron establecer la LIBRARY_PATH, y que trabajaron.
Según el manual GCC:
El valor de LIBRARY_PATH es una lista separada por dos puntos de directorios, al igual que PATH. Cuando se configura como un compilador nativo, GCC prueba los directorios así especificados al buscar archivos del enlazador especial , 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 enlazo con GCC.
Pero ..
- Desde enlazo con gcc qué ld está siendo llamado , como el mensaje de error sugiere?
- ¿Cuál es el punto de que tiene dos variables que sirven el mismo propósito ? ¿Hay alguna otra diferencia de ?
Y de LD_LIBRARY_PATH supuesto sólo tiene sentido con las bibliotecas dinámicas –
Mi punto es que si tuviera que utilizar ld para vincular (directamente), entonces, de acuerdo con el manual de LD, LD_LIBRARY_PATH habría ha utilizado para buscar directorios que contienen las librerías que necesitan estar vinculadas a mi programa. Me falta algo aquí. –
a menos que invoque usted mismo y combine los archivos objeto con las bibliotecas, 'heredará' la ruta que gcc le transfiere. Puede anular el gcc estándar, con las opciones -Xlinker. – Naveen