Ich habe ein Qt-Projekt, das ich konfigurieren und bauen mit CMake. Wenn ich einfach "make" eingebe, um die Anwendung zu erstellen, wird eine Anwendung in meinem Build-Verzeichnis erstellt und alles funktioniert gut. Wenn ich jedoch "make install" eingebe, um in ein Release-Verzeichnis zu installieren, wird die resultierende ausführbare Datei nicht ausgeführt, da sie keine gemeinsam genutzten Bibliotheken finden kann. Ich erhalte eine Fehlermeldung:
release/testapp: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory
Was macht "make install" mit der ausführbaren Datei? Ich dachte, es würde die Datei nur kopieren, aber es muss etwas mit der Datei machen. Ich versuche, beide Dateien von demselben Terminal aus auszuführen, so dass meine Umgebung dieselbe ist.
Hier ist die Ausgabe von ldd für die ausführbare Datei im Release-Verzeichnis (erzeugt von "make install"):
libQtGui.so.4 => not found
libQtCore.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00906000)
libm.so.6 => /lib/tls/libm.so.6 (0x00695000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x008fa000)
libc.so.6 => /lib/tls/libc.so.6 (0x00567000)
/lib/ld-linux.so.2 (0x00548000)
Wenn ich hingegen ldd für die ausführbare Datei im Build-Verzeichnis (das mit "make" erstellt wurde) ausführe, wird Folgendes ausgegeben:
libQtGui.so.4 => /usr/local/Trolltech/Qt-4.7.3/lib/libQtGui.so.4 (0x00560000)
libQtCore.so.4 => /usr/local/Trolltech/Qt-4.7.3/lib/libQtCore.so.4 (0x00111000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x003ec000)
libm.so.6 => /lib/tls/libm.so.6 (0x004b7000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x004da000)
libc.so.6 => /lib/tls/libc.so.6 (0x033fe000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x004e4000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x004f6000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x02e76000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0x004fa000)
libz.so.1 => /usr/lib/libz.so.1 (0x0051e000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x02df6000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x0052e000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x022ac000)
libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x00537000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x02442000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x0218a000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x03937000)
libdl.so.2 => /lib/libdl.so.2 (0x0053f000)
librt.so.1 => /lib/tls/librt.so.1 (0x02238000)
/lib/ld-linux.so.2 (0x00548000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x02377000)
Hier ist die CMakeLists.txt-Datei, die zur Erstellung dieser Dateien verwendet wird:
# CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(testapp)
set(CMAKE_VERBOSE_MAKEFILE OFF)
find_package(Qt4 REQUIRED)
set (CMAKE_C_FLAGS "-m32 -g")
set (CMAKE_CXX_FLAGS "-m32 -g")
set (CMAKE_INSTALL_PREFIX release)
set(PROGNAME testapp)
add_definitions(-Wall)
set(testapp_SRCS
main.cpp
testapp.cpp
)
set(testapp_MOC_HDRS
testapp.h
)
set(QT_USE_QTGUI TRUE)
include(${QT_USE_FILE})
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
qt4_wrap_cpp(testapp_MOC_SRCS ${testapp_MOC_HDRS})
add_executable(${PROGNAME}
${testapp_SRCS}
${testapp_MOC_SRCS}
)
target_link_libraries(${PROGNAME}
${QT_LIBRARIES}
)
install(TARGETS ${PROGNAME} DESTINATION .)
Es ist wahrscheinlich nur etwas dumm, aber warum funktioniert die ausführbare Datei von "make", aber "make install" gibt einen Fehler? Die Dateien haben beide die gleiche Größe.
Danke