Also ich kompiliere die Beispiele für libgstreamermm-0.10, und ich habe ein Problem mit CMake.CMake Pkg-Config Bibliothek Link Pfad
Mit der Version von libgstreamermm-0.10, die standardmäßig auf meinem System installiert ist, das Beispiel segfaults. OK, also habe ich die neuesten Quellen und installiert sie nach/usr/local und bekomme das neue Beispiel. Alles sieht gut aus.
g++ main.cc player_window.cc -o test `pkg-config --cflags --libs gtkmm-3.0` `pkg-config --cflags --libs gstreamermm-0.10`
funktioniert gut und wie erwartet. Großartig, jetzt, um es mit CMake spielen zu lassen. Ich mache eine schnelle CMakeLists.txt-Datei. Ich benutze pkg-config, das hat gut funktioniert und ich möchte nicht wirklich ein Suchmodul hinzufügen. Also meine Datei sieht wie folgt aus:
cmake_minimum_required(VERSION 2.6.2)
project(media_player_gtkmm)
INCLUDE(FindPkgConfig)
set(SOURCES main.cc player_window.cc)
add_executable(media_player_gtkmm ${SOURCES})
#dependencies
pkg_check_modules(GSTMM REQUIRED gstreamermm-0.10)
pkg_check_modules(GTKMM REQUIRED gtkmm-3.0)
include_directories(${GTKMM_INCLUDE_DIRS} ${GSTMM_INCLUDE_DIRS})
link_directories(${GTKMM_LIBRARY_DIRS} ${GSTMM_LIBRARY_DIRS})
target_link_libraries(media_player_gtkmm ${GTKMM_LIBRARIES} ${GSTMM_LIBRARIES})
Alles kompiliert, bis die Verknüpfungsstufe, wo ich Fehler wegen undefinierter Symbole erhalten. Ich sehe dann die Ausgabe von pkg-config --libs gstreamermm-0.10
beginnt mit -L/usr/local/lib. Ich schaue auf die Ausgabe von make VERBOSE=1
und CMake fügt nicht die -L zum Link-Befehl, obwohl ich die Zeile link_directories habe. Obwohl ich die Header für die neue Version von gstreamer in/usr/local/include verwende, wird stattdessen die Bibliothek von/usr/lib verwendet, wenn ich die Version in/usr/local/lib verwenden möchte . Pkg-Config scheint dies zu akzeptieren und passt sich dementsprechend an, aber CMake, obwohl ich es intern mit pkg-config verwende, greift die Link Flags nicht auf.
Ich könnte die Link-Flags für jetzt manuell festlegen, aber das scheint ein bisschen wie ein Hack. Ich bin mir sicher, dass es eine bessere Möglichkeit gibt, dies zu spezifizieren.
Ich habe. Ich verwende die Anweisung link_directories(), also sollte die -L hinzugefügt werden? Ich nehme an, ich missverstände, was link_directories() tut. Ich könnte die LDFLAGS-Variable verwenden, aber ich bin mir nicht sicher, wie ich das machen soll und nicht die Linker-Flags von CMake überlisten soll. –
Richtig, neue Antwort kommt ... – Anonymous
Das tat es, danke! –