CMake linking problem

c++, cmake, executable, gstreamer, linker

Solution

Doh, just needed to replace CMAKE_LINKER_FLAGS with CMAKE_EXE_LINKER_FLAGS.

Problem

I am trying to use CMake to compile a C++ application that uses the C library GStreamer. My main.cpp file looks like this: ``` extern "C" { #include <gst/gst.h> #include <glib.h> } int main(int argc, char* argv[]) { GMainLoop *loop; GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink; GstBus *bus; /* Initialisation */ gst_init (&argc, &argv); return 0; } ``` This works: ``` g++ -Wall $(pkg-config --cflags --libs gstreamer-0.10) main.cpp -o MPEG4GStreamer ``` How to I make it with CMake? My CMakeLists.txt file looks like this: ``` cmake_minimum_required (VERSION 2.6) project (MPEG4GStreamer) add_executable (MPEG4GStreamer main.cpp) include(${CMAKE_ROOT}/Modules/FindPkgConfig.cmake) # Set CMAKE_C_FLAGS variable with info from pkg-util execute_process(COMMAND pkg-config --cflags gstreamer-0.10 OUTPUT_VARIABLE CMAKE_C_FLAGS) string(REPLACE "\n" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) message("CMAKE_C_FLAGS: ${CMAKE_C_FLAGS}") # Set CMAKE_LINKER_FLAGS variable with info from pkg-util execute_process(COMMAND pkg-config --libs gstreamer-0.10 OUTPUT_VARIABLE CMAKE_LINKER_FLAGS) string(REPLACE "\n" "" CMAKE_LINKER_FLAGS ${CMAKE_LINKER_FLAGS}) message("CMAKE_LINKER_FLAGS: ${CMAKE_LINKER_FLAGS}") set_target_properties(MPEG4GStreamer PROPERTIES COMPILE_FLAGS ${CMAKE_C_FLAGS} LINKER_FLAGS ${CMAKE_LINKER_FLAGS}) ``` Output give a linker error: ``` ~ $ cmake . CMAKE_C_FLAGS: -D_REENTRANT -I/usr/include/libxml2 -I/opt/local/include/gstreamer-0.10 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include CMAKE_LINKER_FLAGS: -L/opt/local/lib -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lxml2 -lpthread -lz -lm -lglib-2.0 -lintl -liconv -- Configuring done -- Generating done -- Build files have been written to: /Users/francis/ ~ $ make Linking CXX executable MPEG4GStreamer Undefined symbols: "_gst_init", referenced from: _main in main.cpp.o ld: symbol(s) not found collect2: ld returned 1 exit status make[2]: *** [MPEG4GStreamer] Error 1 make[1]: *** [CMakeFiles/MPEG4GStreamer.dir/all] Error 2 make: *** [all] Error 2 ~ $ ```

Original source