Pregunta

Estoy tratando de compilar / vincular un software muy antiguo en un sistema Linux y, por alguna razón, no puedo vincularme con una biblioteca compartida que esté instalada en mi sistema.

Recibo el siguiente error del enlazador:

/usr/bin/ld: cannot find -lXaw

Sin embargo, la propia biblioteca está instalada. Si corro

ldconfig -v | grep libXaw

Me sale (entre otras cosas) este hit:

libXaw.so.7 -> libXaw7.so.7.0.0

La biblioteca y sus enlaces están en / usr / lib por cierto. Así que nada especial.

Entonces la biblioteca está allí y ldconfig la encuentra. ¿Qué podría causar que ld no encuentre la biblioteca durante el tiempo de enlace? Como ya habrás adivinado, soy bastante nuevo en las cosas de la biblioteca compartida.

¿Alguna idea?

¿Fue útil?

Solución

El enlazador puede estar buscando, literalmente, "libXaw.so". ¿Está en / usr / lib? Si no, puede intentar agregarlo como otro enlace suave desde libXaw7.so.7.0.0.

Otros consejos

El motivo del enlace simbólico por cierto es seleccionar la versión predeterminada para vincular en el caso de varias versiones, tenga en cuenta que el nombre de la biblioteca está integrado en el binario. (que puedes ver con ldd).

¿Se anulan los directorios de la biblioteca -L y no se ve en / usr / lib?

Para vincularlo, necesita el archivo .a, NO el archivo .so, que es la biblioteca de tiempo de ejecución. El objeto compartido solo es útil para un programa ya vinculado a las partes no compartidas de una biblioteca. Esto normalmente se distribuye en un " .a " archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top