MyApp.cファイルの一部の行
...
GstElement* video_decoder;
video_decoder = gst_element_factory_make ("ffdec_h264", "video_decoder_one");
assert(video_decoder);
...
コマンドライン gcc を使用してコンパイルすると、完全に正常にコンパイル/実行されます。
gcc -o app MyApp.c `pkg-config --cflags --libs gstreamer-0.10 gstreamer-app-0.10 `
今、私はcmake(他のみんなと同じように!)を使いたかったので、スタックオーバーフローで与えられたさまざまなアプローチを試した後、いくつかの派手な行を追加しました... pkg_check_modules()、execute_process()など。
エラー: アサーション 'video_decoder' が失敗しました
質問 1 -
ここで何が問題になる可能性がありますか? gcc compile コマンドと同じ方法でインクルード/リンクしましたか?
それで、ffdec_h264
実際にどこにあり、通常のgccコンパイルコマンドがどこからそれを選択したかを確認しようとしました
$ gst-inspect-0.10 ffdec_h264
をもたらしました
プラグインの詳細:
Name: ffmpeg Description: All FFmpeg codecs and formats (local snapshot) Filename: /usr/lib/gstreamer-0.10/libgstffmpeg.so Version: 0.10.12 License: LGPL Source module: gst-ffmpeg Binary package: FFmpeg Origin URL: http://ffmpeg.org/
要素は/usr/lib/gstreamer-0.10/libgstffmpeg.soに存在していました
確認しようとしたので、pkg-config --cflags --libs gstreamer-0.10 gstreamer-app-0.10
コマンドラインで実行して取得しました
-pthread -I/usr/local/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/libxml2 -pthread -L/usr/local/lib -lgstapp-0.10 -lgstbase-0.10 -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lxml2 -lglib-2.0
質問 2 - (優先度が低い) 上記の pk-config からリンクされている gstffmpeg 共有オブジェクトが表示されませんが、gcc を使用したコンパイルは機能し、コードは正常に実行されます。どのように ?
ただし、cmakeを使用した同じコンパイル/実行はうまくいかないようです。
通常のもの以外に、CMakeLists.txt に以下の行もあります。
find_library(GST_FFMPEG_LIBRARIES NAMES gstffmpeg PATHS /usr/lib/gstreamer-0.10/)
それをリンクし、find_library()を参照してください
質問 3-
ffdec_h264 が存在する正確な .so 名をリンクしたので、要素が見つからないという同じエラーが発生するのはなぜですか。もっと掘り下げるためのデバッグオプション、またはここで何が間違っているのか教えてもらえますか?