6

CMake を使用して、C ライブラリ GStreamer を使用する C++ アプリケーションをコンパイルしようとしています。

私の main.cpp ファイルは次のようになります。

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

これは機能します:

g++ -Wall $(pkg-config --cflags --libs gstreamer-0.10) main.cpp -o MPEG4GStreamer

CMakeで作るには?私の CMakeLists.txt ファイルは次のようになります。

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

出力でリンカ エラーが発生します。

~ $ 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
~ $
4

3 に答える 3

5

Doh、CMAKE_LINKER_FLAGSをCMAKE_EXE_LINKER_FLAGSに置き換える必要があります。

于 2009-11-25T13:18:05.450 に答える
4

本当の問題は、プロパティ名を間違って入力したことです。これはLINK_FLAGSであり、 LINK ER _FLAGSではありません。あなたの解決策は単なる回避策です。

于 2011-07-12T03:56:54.823 に答える
2

ライブラリ gstreamer-0.10 を見つけ、target_link_libraries を使用してそれをターゲットにリンクする必要があります。FindGStream.cmake モジュールが必要です。これは、Google 検索で見つけたものです。

http://gitorious.org/phonon/import/blobs/88743646f086352c5b41544ad6b0b48d2379df62/cmake/FindGStreamer.cmake

そのようなモジュールを使用すると、次のようなものが必要になります。

include(FindGStreamer.cmake) include_directories( ${GSTREAMER_INCLUDE_DIR}) add_definitions(${GSTREAMER_DEFINITIONS}) target_link_libraries(MPEG4GStreamer ${GSTREAMER_LIBRARIES})

于 2010-02-13T16:50:50.643 に答える