0

編集:質問は解決しました(下部を参照)

問題の解決策を探すのに何時間も費やしましたが、うまくいきませんでした。私は OSX を使用しており、ffmpeg を自分の Qt プロジェクトにリンクしようとしています。私は可能な限り簡単なことをしようとしましたが、これでもうまくいきません:

yasm と x264 をインストールした後、./configure --enable-static --enable-gpl --enable-libx264 を実行し、make && make install を実行しました。

コマンドラインで実行しようとすると、ffmpegは正常に実行されます。次に、次の ffmpeg.pro ファイルを使用して、ffmpeg ディレクトリに単純なプロジェクトをセットアップしました。

TEMPLATE = app

QT += core

INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib
LIBS += -lavdevice -lavfilter -lavformat -lavcodec -lpostproc -lswresample -lswscale -lavutil -lpthread -lbz2 -lm -lz -lx264

HEADERS += ffmpeg.h

SOURCES += ffmpeg.c

これらすべてのライブラリが必要かどうかはわかりませんが、それらはすべて ffmpeg が作成した .a ファイルでした。プロジェクトを (そのまま) ビルドしようとすると、次のリンカ エラーが発生します。

g++ -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -o ffmpeg.app/Contents/MacOS/ffmpeg ffmpeg.o -F/Users/dtamayo/QtSDK/Desktop/Qt/4.8.1/gcc/lib -L/Users/dtamayo/QtSDK/Desktop/Qt/4.8.1/gcc/lib -L/usr/local/lib -lavdevice -lavfilter -lavformat -lavcodec -lpostproc -lswresample -lswscale -lavutil -lpthread -lbz2 -lm -lz -lx264 -framework QtGui -L/usr/local/pgsql/lib -L/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/Qt/4.8.1/ gcc/lib -F/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/Qt/4.8.1/gcc/lib -framework QtCore ld:警告:ディレクトリが見つかりませんオプション '-L/usr/local/pgsql/lib' ld: 警告: オプション '-L/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/ のディレクトリが見つかりませんQt/4.8.1/gcc/lib' ld: 警告:オプション '-F/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/Qt/4.8.1/gcc/lib' のディレクトリが見つかりませんアーキテクチャ x86_64 の未定義シンボル: " _audio_sync_method」、参照先: ffmpeg.o の _write_frame _do_audio_out ffmpeg.o から参照 「_audio_volume」、参照先: ffmpeg.o の _transcode_init .o _decode_video in ffmpeg.o _transcode_init in ffmpeg.o 「_copy_tb」、参照元: _transcode_init in ffmpeg.o 「_copy_ts」、参照元: ffmpeg.o _process_input ffmpeg。o ffmpeg.o の _do_video_out ffmpeg.o の _decode_video ffmpeg.o の _process_input 「_do_benchmark」、参照元: ffmpeg.o の _ffmpeg_cleanup from: ffmpeg.o の _check_keyboard_interaction "_do_pkt_dump"、参照先: ffmpeg.o の _check_keyboard_interaction "_dts_delta_threshold"、参照: ffmpeg.o の _process_input ffmpeg.o _process_input ffmpeg.o の「_exit_on_error」、参照先: ffmpeg.o の _write_frame ffmpeg の _do_subtitle_out。o ffmpeg.o の _process_input 「_exit_program」、参照先: ffmpeg.o の _sigterm_handler ffmpeg.o の _assert_avoptions ffmpeg.o の _abort_codec_experimental ffmpeg.o の _write_frame . "_ffmpeg_parse_options"、参照元: ffmpeg.o の _main "_frame_bits_per_raw_sample"、参照元: ffmpeg.o の _transcode_init "_iconv"、参照元: libavcodec.a(utils.o) の _avcodec_decode_subtitle2 "_iconv_close"、参照元: _avcodec_decode_subtitle2 libavcodec.a(utils.o) 内の _avcodec_open2 libavcodec.a(utils.o) 内の「_iconv_open」、次から参照: libavcodec.a(utils.o) libavcodec.a(utils.o) の _avcodec_open2 「_init_simple_filtergraph」、参照先: ffmpeg.o の _transcode_init 「_ist_in_filtergraph」、参照先: ffmpeg.o の _decode_audio ffmpeg.o の _decode_video 「_options」、参照先: _main in ffmpeg.o (おそらくあなたが意味したのは: _ff_mpv_generic_options, _ff_rawvideo_options , _av_set_options_string , _ff_rtsp_options ) "_parse_loglevel", から参照: ffmpeg.o の _main "_parse_time_or_die", から参照: ffmpeg.o の _parse_forced_key_frames .o _process_input ffmpeg.o の「_print_stats」、参照先: ffmpeg.o の _print_report 参照先: ffmpeg の _print_report。o ffmpeg.o の _check_keyboard_interaction 「_register_exit」、次から参照: ffmpeg.o の _main から参照: ffmpeg.o の _main 「_show_usage」、次から参照: ffmpeg.o の _main ffmpeg.o の「_uninit_opts」から参照: ffmpeg.o の _ffmpeg_cleanup から参照: ffmpeg.o の _write_frame _do_video_out ffmpeg.o の _transcode_init から参照: ffmpeg.o の _ffmpeg_cleanup ffmpeg.o の _do_video_out ffmpeg.o の _do_video_stats ffmpeg.o の _flush_encoders ld: アーキテクチャ x86_64 collect2 のシンボルが見つかりません: ld は 1 つの終了ステータスを返しました make:ディレクトリ `/Users/dtamayo/Desktop/ffmpeg-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Debug' を離れる make:* [ffmpeg.app/Contents/MacOS/ffmpeg] エラー 1 14:35:42: The process "/usr/bin/make" exited with code 2. プロジェクト ffmpeg のビルド中にエラーが発生しました (対象: デスクトップ) ビルド ステップの実行時 '作る'


編集:


迅速なご対応ありがとうございます。友人の助けを借りて問題を発見したと言うのは恥ずかしいので、私と同じように無能な人が同じ問題に遭遇した場合に備えて、ここに解決策を追加します!

問題は、ffmpeg ライブラリの一部としてビルドされない次のソース ファイルをプロジェクトに追加していなかったことです。

cmdutils.c ffmpeg_filter.c ffmpeg_opt.c

さらに、ライブラリ パスに usr/lib を追加し、ライブラリ -liconv を追加する必要がありました。

4

2 に答える 2

0

ld: 警告: オプション '-L/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/Qt/4.8.1/gcc/lib' のディレクトリが見つかりません ld: 警告: オプション '-F/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/Qt/4.8.1/gcc/lib' のディレクトリが見つかりません

Qt を /tmp にインストールしましたが、再起動後に自動削除されましたか? 私は OSX ユーザーではないので、このプラットフォームは私の考えとは異なる動作をするかもしれませんが、リンカが存在しないフォルダにアクセスしようとすると、うまくいきません。

于 2013-08-14T19:36:15.990 に答える
0

問題はおそらくソース コードにあります。ヘッダーを #include する場合は、extern "C" {} でラップする必要があります。これがないと、リンカーは c++ 関数マングリングを使用してリンクを試みます。

extern "C"
{
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}
于 2013-08-14T20:40:10.753 に答える