2013-08-14 2 views
0

편집을 위해는 FFmpeg 라이브러리를 링크 할 수 없습니다. 나는 OSX에서 ffmpeg를 내 자신의 Qt 프로젝트에 연결하려고한다. 가능한 가장 단순한 작업을 시도했지만 작동하지 않습니다.내 자신의 Qt는 프로젝트

yasm과 x264를 설치 한 후 을 실행했습니다 ./configure --enable -static --enable-gpl --enable-libx264 그런 다음 make & & make install

그런 다음 명령 줄에서 실행하려고하면 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 모든 운영자와 파일을했다 : 그때 바로 다음 ffmpeg.pro 파일로는 FFmpeg 디렉토리에 간단한 프로젝트를 설정 . 프로젝트를 빌드하려고하면 다음과 같은 링커 오류가 발생합니다.

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/사용자/dtamayo/QtSDK/데스크탑/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 옵션에 대해 디렉토리를 찾을 수 없습니다. 건축 x86_64에 대한 -everywhere - 오픈 소스-SRC-4.8.1/데스크탑/Qt는가/4.8.1/GCC/lib에 ' 정의되지 않은 심볼 : "_audio_sync_method"에서 참조 : ffmpeg.o에서 ffmpeg.o _do_audio_out에 _write_frame "_audio_volume"에서 참조 :에서 참조 ffmpeg.o "_configure_filtergraph"에 _transcode_init : :에서 참조 ffmpeg.o "_cmdutils_read_file"에 _transcode_init ffmpeg.o에 ffmpeg.o _decode_video에 _decode_audio _transcode_init in ffm 에서 참조 ffmpeg.o "_debug_ts"에 _process_input :에서 참조 ffmpeg.o "_copy_ts"에 _transcode_init :에서 참조 peg.o "_copy_tb"는 FFmpeg에서 ffmpeg.o _do_audio_out에서 _write_frame. 오에서 참조 ffmpeg.o "_do_benchmark"에 ffmpeg.o _process_input에서 ffmpeg.o _decode_video에서 _do_video_out :에 _update_benchmark : ffmpeg.o "_do_benchmark_all"에 ffmpeg.o _main에 _ffmpeg_cleanup은에서 참조 ffmpeg.o "_do_hex_dump"(참조 :) 는 FFmpeg에서 _process_input :에서 참조 ffmpeg.o "_dts_delta_threshold"에 ffmpeg.o _process_input에 _check_keyboard_interaction :에서 참조 ffmpeg.o "_do_pkt_dump"에서 ffmpeg.o _process_input에서 5,_check_keyboard_interaction.ffmpeg.o "_exit_program에 ffmpeg.o _process_input에 ffmpeg.o _do_subtitle_out에 _write_frame :에서 참조 ffmpeg.o "_exit_on_error "에 ffmpeg.o _process_input에 _do_video_out :에서 참조 오 "_dts_error_threshold " "에서 참조 : ffmpeg.o 에 ffmpeg.o _do_video_out에 ffmpeg.o _do_subtitle_out에 ffmpeg.o _do_audio_out에 ffmpeg.o _write_frame에 ffmpeg.o _abort_codec_experimental에 ffmpeg.o _assert_avoptions에 _sigterm_handler ..에서 참조 ffmpeg.o "_iconv"에 _transcode_init : :에서 참조 ffmpeg.o "_frame_bits_per_raw_sample"에 _main :에서 참조"_ffmpeg_parse_options", libavcodec.a (utils.o)에 _avcodec_decode_subtitle2 "_iconv_close 에서 참조 : "에서 참조 libavcodec.a에 _avcodec_decode_subtitle2 (utils.o) libavcodec.a (utils.o)에서 _avcodec_open2 "_iconv_open ": 위해 libavcodec의 libavcodec.a (utils.o)에 _avcodec_decode_subtitle2 _avcodec_open2 .a (utils.o) "_init_simple_filtergraph", 참조처 : _transcode_init in ffmpeg.o " _ist_in_filtergraph "에서 참조 : ffmpeg.o에 _decode_audio ffmpeg.o _decode_video에 "_options "에서 참조 :에 _main ffmpeg.o (어쩌면 당신 의미 : _ff_mpv_generic_options, _ff_rawvideo_options, _av_set_options_string, _ff_rtsp_options) "_parse_loglevel " 에서 참조 : ffmpeg.o "_parse_time_or_die"에 _main에서 참조 :에서 참조 ffmpeg.o "_print_error"에 _parse_forced_key_frames : ffmpeg.o "_print_stats"에 _write_frame ffmpeg.o _process_input에서 참조 from : fprinta.o의 _print_report에서 참조 ffmpeg.o "_show_banner"에 _main : :에서 참조 ffmpeg.o "_register_exit"에 ffmpeg.o _check_keyboard_interaction에 _print_report :에서 참조"_qp_hist"ffmpeg.o 에 _main " 에서 참조 _video_sync_method ","ffmpeg.o 에 _ffmpeg_cleanup에서 참조, "_uninit_opts"ffmpeg.o 에 _transcode에서 참조, "_stdin_interaction"ffmpeg.o 에 _main에서 참조, "_show_usage _write_frame in ffmpeg.o fdo.video_out in ffmpeg.o _tran ffmpeg.o LD에 ffmpeg.o _flush_encoders에 ffmpeg.o _do_video_stats에 ffmpeg.o _do_video_out에 _ffmpeg_cleanup :에서 참조 ffmpeg.o "_vstats_filename"에서 scode_init, 심볼 (들) 아키텍처 x86_64의 찾을 수 없습니다 collect2 : 신분증 1 개 종료 상태를 반환 메이크업 : 떠나 디렉토리`/ 사용자/dtamayo/데스크탑 /는 FFmpeg 빌드 - 데스크탑 Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Debug ' 메이크업 : * [ffmpeg.app/Contents/MacOS/ffmpeg] 오류 1 14 : 35:42 : "/ usr/bin/make"프로세스가 코드 2와 함께 종료되었습니다.프로젝트는 FFmpeg 구축하는 동안 오류가


귀하의 빠른 응답 주셔서 감사합니다 : 단계를 구축 실행할 때 (대상 데스크톱) 을


편집 '확인'. 나는 친구의 도움으로 문제를 발견했다는 것을 당황스럽게 생각합니다. 그래서 같은 문제에 부딪 히지 않는 다른 사람들이있을 경우에 대비하여 여기에 해결책을 추가 할 것입니다!

문제는 내가는 FFmpeg 라이브러리 중 하나의 일환으로 구축되지 않는 프로젝트에 다음 소스 파일을 추가하지 않은 것입니다 :

cmdutils.c의 ffmpeg_filter.c의 ffmpeg_opt.c을

또한 라이브러리 경로에 usr/lib를 추가하고 -liconv 라이브러리를 추가해야했습니다.

답변

0

ld: warning: directory not found for option '-L/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/Qt/4.8.1/gcc/lib' ld: warning: directory not found for option '-F/tmp/qt-stuff-85167/source/qt-everywhere-opensource-src-4.8.1/Desktop/Qt/4.8.1/gcc/lib'

Qt를/tmp에 설치했는데 자동 재부팅 후 재부팅 되셨습니까? 나는 OSX 사용자가 아니기 때문에이 플랫폼은 내가 생각한 것보다 다르게 작동 할 수도 있지만 링커가 존재하지 않는 폴더에 액세스하려고하면 아무데도 좋아 보이지 않는다.

0

문제는 아마도 소스 코드에 있습니다. 헤더를 #include 할 때는 extern "C"{}로 묶어야합니다. 이것으로 링커는 C++ 함수 맹 글링을 사용하여 링크를 시도합니다.

extern "C" 
{ 
#include <libavformat/avformat.h> 
#include <libavcodec/avcodec.h> 
#include <libswscale/swscale.h> 
}