Vinculación: ¿qué biblioteca está incluida?

La página de manual de gcc dice: "El orden es importante cuando utiliza varias opciones del mismo tipo; por ejemplo, si especifica -L más de una vez, los directorios se buscan en el orden especificado ".

Sin embargo, son estos -L directorios buscados antes que los directorios del sistema (por ejemplo, aquellos que ld normalmente usa)?

Tengo el caso de que tengo dos bibliotecas con el mismo nombre, una en una ubicación del sistema y otra en mi directorio de trabajo, y quiero usar la mía, pero no puedo averiguar cómo verificar que se esté usando mi versión.

preguntado el 16 de mayo de 11 a las 16:05

1 Respuestas

Pruebe "ldd / bin / your / application". P.ej:

ldd `which bash`
linux-vdso.so.1 =>  (0x00007fff46eda000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007facdd618000)
libdl.so.2 => /lib/libdl.so.2 (0x00007facdd414000)
libc.so.6 => /lib/libc.so.6 (0x00007facdd090000)
/lib64/ld-linux-x86-64.so.2 (0x00007facdd863000)

En general, hay 3 opciones para especificar qué biblioteca usar para su binario:

  1. Configuración de la variable de entorno LD_LIBRARY_PATH antes de iniciar su ejecutable
  2. Opción de enlazador RPATH (consulte otras mis preguntas / respuestas en SO para obtener más información sobre esta opción)
  3. Agregue su biblioteca compartida a todas las demás bibliotecas del sistema.

contestado el 16 de mayo de 11 a las 21:05

¡Binario muy útil! ¿Hay alguna forma de asegurar esto dentro de mi Makefile? - sholsapp

@gnucom: Sí, puede usar ldd desde Makefile. Aunque si esto será una buena idea depende de su proyecto. - user389238

lo que quiero decir, ¿hay alguna manera de asegurar que mis directorios incluidos se busquen antes que los del sistema, en lugar de verificar qué bibliotecas se incluyeron después? - sholsapp

@gnucom. Ahora veo lo que quieres decir. Aquí hay una muy buena explicación sobre cómo vincular tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html. También vea mi respuesta actualizada. - user389238

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.