2010-03-23 17 views
10

Me gustaría incluir libQtGui.so.4 libQtNetwork.so.4 y libQtCore.so.4 en el mismo directorio donde reside mi aplicación. ¿Cómo haré que Qt comprenda esto? El objetivo es tener una aplicación independiente que use bibliotecas compartidas¿Cómo puedo establecer dónde una aplicación Qt encuentra un módulo Qt?

+0

También puede decidir vincular estáticamente contra las bibliotecas Qt, de esa manera no dependerá de la versión Qt local instalada (así es como Opera solía hacerlo en Linux) – sisis

+0

Problema al enlazar estáticamente en la plataforma que estoy Despliegue encendido es que fontconfig tiene errores (red Hat 5.3 usa fontconfig 2.4.1) –

+0

cuando trato de construir estáticamente existe una referencia indefinida a FcTypeFreeQueryFace y cuando trato de actualizar fontconfig me dice que fontconfig está actualizado ... ..bummer..then tengo que encontrar una manera de modificar los archivos Qt para compilar con una versión de fontconfig que proporciono. Puedo construir mi aplicación dinámicamente con un fontconfig que proporciono pero no estáticamente –

Respuesta

8

La configuración de la variable de entorno LD_LIBRARY_PATH es una opción. Por ejemplo:

export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH 

Otra opción es establecer el RPATH de su aplicación Qt durante la vinculación. Establecer el RPATH en el valor "$ ORIGIN" hará que el enlazador dinámico busque en el mismo directorio que su aplicación Qt en tiempo de ejecución. Por ejemplo, si se usa qmake, añadir el siguiente fragmento de su archivo de proyecto:

unix:!mac{ 
    QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN 
    QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib 
    QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs 
    QMAKE_RPATH= 
} 

Esto establecerá el rPath a "$ ORIGEN: $ ORIGEN/lib: $ ORIGIN/libs", lo que significa que el enlazador dinámico primero mire en la ubicación de su aplicación Qt, luego en un subdirectorio lib en su ubicación, luego en un subdirectorio libs en su ubicación, y finalmente en cualquier ubicación definida por el sistema.

+0

parece que no funciona. –

+0

Aquí está la salida de compilación: "g ++: opción no reconocida" -wl, - rpath = $ ORIGIN '"" g ++: opción no reconocida' -wl, - rpath = $ ORIGIN/lib '"" g ++: opción no reconocida' - wl, - rpath = $ ORIGIN/libs '" –

+0

eliminó los archivos manualmente en el Makefile directamente, presionó build all again luego pasó ... ahora para probarlo. –

0

UNIX/Linux buscará LD_LIBRARY_PATH (si está configurado) primero antes de buscar en las bibliotecas estándar del sistema. Entonces, si estableces eso, puedes anularlo. Al igual que establecer la RUTA en Windows. Mismo efecto. El orden importa

Puede agregar ./ ​​o. a LD_LIBRARY_PATH también.

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 
+0

Lo intenté y no funciona. Ingresé al proyecto y cambié LD_LIBRARY_PATH a. pero nada cambió cuando volví a la terminal y escribí ldd ./MyApp ... Estoy compilando desde la GUI ... ¿debería intentarlo desde la línea de comandos? –

0

LD_LIBRARY_PATH y QMAKE_RPATH nunca funcionó para mí. En cambio, establecí QMAKE_RPATHDIR en mi archivo .pro. Por ejemplo, después de haber construido e instalado (make install) Qt, se ha colocado en /usr/local/Trolltech/Qt-4.8.5/lib/. a continuación, escribo lo siguiente en mi archivo .pro:

QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/ 

Nota 1: Las rutas relativas parecen no funcionar. Prefiere caminos absolutos.

Nota 2: Cuando a continuación make, se puede ver que la siguiente opción es dado al enlazador: -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/

Nota 3: Para asegurarse de que los enlaces binarios de forma dinámica a la biblioteca correcta, se puede visualizar el versión de Qt en tiempo de ejecución entregada por qVersion().

Cuestiones relacionadas