2012-04-09 10 views
7

Así que estoy compilando los ejemplos de libgstreamermm-0.10, y me he encontrado con un problema con CMake.CMake Pkg-Config Ruta de enlace de biblioteca

Con la versión de libgstreamermm-0.10 que está instalada de manera predeterminada en mi sistema, el ejemplo segfaults. OK, entonces obtuve las últimas fuentes y las instalé en/usr/local y obtengo el nuevo ejemplo. Todo se ve bien.

g++ main.cc player_window.cc -o test `pkg-config --cflags --libs gtkmm-3.0` `pkg-config --cflags --libs gstreamermm-0.10` 

funciona bien y como se esperaba. Genial, ahora para intentar que juegue bien con CMake. Hago un archivo rápido de CMakeLists.txt. Yo uso pkg-config, ya que funcionó bien y realmente no quiero agregar un módulo de búsqueda. Así que mi archivo tiene el siguiente aspecto:

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}) 

Todo compila hasta la etapa de enlace, donde recibo errores de símbolos indefinidos. Luego veo que la salida de pkg-config --libs gstreamermm-0.10 comienza con -L/usr/local/lib. Miro la salida de make VERBOSE=1 y CMake NO agrega el -L al comando de enlace, aunque tengo la línea link_directories. Así que aunque estoy usando los encabezados para la nueva versión de gstreamer en/usr/local/include, la biblioteca de/usr/lib se usa en su lugar, cuando quiero que se use la versión en/usr/local/lib . Pkg-Config parece retomar esto, y se ajusta en consecuencia, pero CMake, aunque lo tengo usando pkg-config internamente, no capta las banderas de enlace.

Pude configurar manualmente las banderas de enlace por ahora, pero eso parece un poco complicado. Estoy seguro de que hay una mejor manera de especificar esto.

Respuesta

8

link_directories solo afecta a objetivos que vienen AFTER it. Por lo tanto, necesita para mover su add_executable después de la llamada link_directories.

+0

Tengo. Estoy usando la directiva link_directories(), ¿así que debería agregar la -L? Creo que estoy entendiendo mal lo que link_directories() hace. Podría usar la variable LDFLAGS, pero no estoy seguro de cómo hacerlo y no bloquear las propias banderas del enlazador de CMake. –

+0

Bien, nueva respuesta viene ... – Anonymous

+0

¡Eso lo hizo, gracias! –

Cuestiones relacionadas