uic no puede encontrar biblioteca compartida - linux, qt5

Estoy tratando de hacer un Qt5 como parte de mi árbol de fuentes, así que no lo he instalado en mi máquina, simplemente lo copié del control de código fuente. Tengo un problema cuando intento ejecutar uic.exe:

    [email protected]:~/ct/LinuxLibs/Qt/bin > ./uic

./uic: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

Todavía estoy obteniendo el mismo error incluso cuando copio la biblioteca libQt5Core al directorio bin. ¿Cómo está buscando uic bibliotecas compartidas? ¿Hay alguna variable de entorno que deba configurar para solucionarlo?

Respuestas

1 para la respuesta № 1

Este es otro caso más de no colocar las bibliotecas compartidas dependientes en una ubicación definida que es compatible con el programa.

Si planea hacer "copiar los archivos en el mismo directorio que el ejecutable", la solución rápida es hacer referencia al directorio en la ruta de carga de la biblioteca, por ejemplo, si el binario está en $HOME/foo, tú lo haces:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$HOME/foo

Esto agrega o hace $HOME/foo la ruta de carga del enlazador en tiempo de ejecución. Como resultado, cualquier programa que ejecute se verá en este directorio para las bibliotecas, así como el conjunto predeterminado para el sistema operativo (definido por el ld.so configuración), así como las rutas que se definen dentro de la propia aplicación (el rpath)

Si va a seguir esta ruta, lo que puede hacer es mover el binario a target.bin, crear un script de destino bash, que invoque el archivo bin automáticamente, p.

#!/bin/bash -p
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$(dirname $0)
exec $0.bin "$*"

Un mecanismo secundario que te permitirácambiar la ubicación de búsqueda de un binario; sin requerir una variable de entorno, insertar es modificar el binario para que busque en diferentes ubicaciones de lo que normalmente hace; esto aprovecha algunas características del enlazador en tiempo de ejecución (que busca bibliotecas).

Hay un programa llamado chrpath, que puede ser agregado por varios administradores de paquetes, lo que le permite editar el rpath directamente. En este caso; puedes cambiar la ruta de búsqueda adicional del binario usando:

chrpath -r "$ORIGIN" foo

Esto significa que el programa buscará en el mismo directorio que el binario para .so archivos, lo que permite que se ejecute.


preguntas relacionadas
Menú