C++Ubuntu.使用FFMPEG库编译的多个未定义引用

C++ Ubuntu. Multiple undefined references compiling with FFMPEG libs

本文关键字:未定义 引用 编译 使用 FFMPEG C++Ubuntu      更新时间:2023-10-16

我在Ubuntu 12.10上安装了FFMPEG库和标头,如下所述。

在我的C++应用程序中,当我编译(gcc(时使用FFMPEG,我得到的是:

/usr/local/lib/libavcodec.a(libfaac.o(:函数中Faac_encode_frame': /root/ffmpeg/libavcodec/libfaac.c:179: undefined reference to faacEncEncode'/usr/local/lib/libavcodec.a(libfaac.o(:在函数Faac_encode_close': /root/ffmpeg/libavcodec/libfaac.c:52: undefined reference to faacEncClose中/usr/local/lib/libavcodec.a(libfaac.o(:函数中Faac_encode_init': /root/ffmpeg/libavcodec/libfaac.c:78: undefined reference to faacEncOpen'/root/ffmpeg/libavcodec/libfaac.c:88:未定义对faacEncGetCurrentConfiguration' /root/ffmpeg/libavcodec/libfaac.c:139: undefined reference to faacEncGetDecoderSpecificInfo'/root/ffmpeg/libavcodec/libfaac.c:153:未定义对faacEncSetConfiguration' /usr/local/lib/libavcodec.a(libfdk-aacenc.o): In function aac_encode_close'的引用:/root/ffmpeg/libavcodec/libfdk aacen.c:99:未定义对aacEncClose' /usr/local/lib/libavcodec.a(libfdk-aacenc.o): In function aac_encode_frame'的引用:/root/ffmpeg/libavcodec/libfdk aacenc.c:344:未定义对aacEncEncode' /usr/local/lib/libavcodec.a(libfdk-aacenc.o): In function aac_encode_init'的引用:/root/ffmpeg/libavcodec/libfdk aacenc.c:116:未定义对aacEncOpen' /root/ffmpeg/libavcodec/libfdk-aacenc.c:125: undefined reference to aacEncoder_SetParam'/root/ffmpeg/libavcodec/libfdk aacenc.c:132:对aacEncoder_SetParam' /root/ffmpeg/libavcodec/libfdk-aacenc.c:140: undefined reference to aacEncoder_SetParam'/root/ffmpeg/libavcodec/libfdk aacenc.c:160的未定义引用:未定义对aacEncoder_SetParam' /root/ffmpeg/libavcodec/libfdk-aacenc.c:167: undefined reference to aacEncoder_SetParam的引用'/usr/local/lib/libavcodec.a(libfdk-aacenc.o(:/root/ffmpeg/libavcodec/libfdk-aecenc.c:185:对aacEncoder_SetParam' follow /usr/local/lib/libavcodec.a(libfdk-aacenc.o): In function aac_encode_init':/root/ffmpeg/libavcodec/libfdk aacenc.c:263的更多未定义引用:对aacEncEncode' /root/ffmpeg/libavcodec/libfdk-aacenc.c:269: undefined reference to aacEncInfo的未定义引用/usr/local/lib/libavcodec.a(libmp3lame.o(:In函数mp3lame_encode_frame': /root/ffmpeg/libavcodec/libmp3lame.c:204: undefined reference to lame_encode_buffer_foat'/root/ffmpeg/libavcodec/libmp3lame.c:188:对的未定义引用lame_encode_buffer' /root/ffmpeg/libavcodec/libmp3lame.c:191: undefined reference to lame_encode_buffer_int'/root/ffmpeg/libavcodec/libmp3lame.c:210:对的未定义引用lame_encode_flush' /usr/local/lib/libavcodec.a(libmp3lame.o): In function mp3lame_encode_close':/root/ffmpeg/libavcodec/libmp3lame.c:88:对的未定义引用lame_close' /usr/local/lib/libavcodec.a(libmp3lame.o): In function mp3lame_encode_init':/root/ffmpeg/libavcodec/libmp3lame.c:100:对lame_init' /root/ffmpeg/libavcodec/libmp3lame.c:104: undefined reference to lame_set_num_channels'/root/ffmpeg/libavcodec/libmp3lame.c:105的未定义引用:对lame_set_mode' /root/ffmpeg/libavcodec/libmp3lame.c:108: undefined reference to lame_set_in_samplerate'/root/ffmpeg/libavcodec/libmp3lame.c:109的未定义引用:对lame_set_out_samplerate' /root/ffmpeg/libavcodec/libmp3lame.c:113: undefined reference to lame_set_quality'/root/ffmpeg/libavcodec/libmp3lame.c:115的未定义引用:未定义引用lame_set_quality' /root/ffmpeg/libavcodec/libmp3lame.c:119: undefined reference to lame_set_VBR'/root/ffmpeg/libavcodec/libmp3lame.c:120:未定义引用lame_set_VBR_quality' /root/ffmpeg/libavcodec/libmp3lame.c:123: undefined reference to lame_set_brate'/root/ffmpeg/libavcodec/libmp3lame.c:127:未定义参考lame_set_bWriteVbrTag' /root/ffmpeg/libavcodec/libmp3lame.c:130: undefined reference to lame_set_disable_reservoir'/root/ffmpeg/libavcodec/libmp3lame.c:133:对lame_init_params' /root/ffmpeg/libavcodec/libmp3lame.c:139: undefined reference to lame_get_encoder_delay'/root/ffmpeg/libavcodec/libmp3lame.c:142的未定义引用:未定义对lame_get_framesize' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_wb_decode_close'的引用:/root/ffmpeg/libavcodec/libopencore amr.c:363:对D_IF_exit' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_nb_decode_frame的未定义引用':/root/ffmpeg/libavcodec/libopencore amr.c:122:对Decoder_Interface_Decode' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_wb_decode_frame的未定义引用:/root/ffmpeg/libavcodec/libopencore amr.c:352:未定义对D_IF_decode' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_nb_encode_frame'的引用:/root/ffmpeg/libavcodec/libopencore amr.c:267:对Encoder_Interface_Encode' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_wb_decode_init'的未定义引用:/root/ffmpeg/libavcodec/libopencore amr.c:318:对D_IF_init' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_nb_encode_close'的未定义引用:/root/ffmpeg/libavcodec/libopencore amr.c:222:对Encoder_Interface_exit' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_nb_decode_close'的未定义引用:/root/ffmpeg/libavcodec/libopencore amr.c:86:对Decoder_Interface_exit' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_nb_encode_init'的未定义引用:/root/ffmpeg/libavcodec/libopencore amr.c:205:对Encoder_Interface_init' /usr/local/lib/libavcodec.a(libopencore-amr.o): In function amr_nb_decode_init'的未定义引用:/root/ffmpeg/libavcodec/libopencore amr.c:73:对Decoder_Interface_init' /usr/local/lib/libavcodec.a(libspeexdec.o): In function libspeex_decode_frame的未定义引用:/root/ffmpeg/libavcodec/libspeexdec.c:139:对speex_bits_remaining' /root/ffmpeg/libavcodec/libspeexdec.c:147: undefined reference to speex_bits_read_from'/root/ffmpeg/libavcodec/libspeexdec的未定义引用。c:152:对speex_decode_int' /root/ffmpeg/libavcodec/libspeexdec.c:140: undefined reference to speex_bits_peek_sunsigned'/root/ffmpeg/libavcodec/libspeexdec的未定义引用。c:158:未定义对speex_decode_stereo_int' /usr/local/lib/libavcodec.a(libspeexdec.o): In function libspeex_decode_close'的引用:/root/ffmpeg/libavcodec/libspeexdec.c:169:对speex_bits_destroy' /root/ffmpeg/libavcodec/libspeexdec.c:170: undefined reference to speex_decoder_destroy'/usr/local/lib/libavcodec.a(libspeexdec.o(的未定义引用:In函数libspeex_decode_init': /root/ffmpeg/libavcodec/libspeexdec.c:48: undefined reference to speex_packet_to_header'/root/ffmpeg/libavcodec/libspeexdec.c:67:对speex_header_free' /root/ffmpeg/libavcodec/libspeexdec.c:82: undefined reference to speex_lib_get_mode'/root/ffmpeg/libavcodec/libspeexdec.c:100的未定义引用:对speex_bits_init' /root/ffmpeg/libavcodec/libspeexdec.c:101: undefined reference to speex_decoder_init'/root/ffmpeg/libavcodec/libspeexdec.c:110的未定义引用:未定义对speex_std_stereo_request_handler' /root/ffmpeg/libavcodec/libspeexdec.c:113: undefined reference to specex_decoder_ctl'/root/ffmpeg/libavcodec/libspecexdec的引用。c:43:未定义对"specex_nb_mode"的引用

等等。。。。

当我编译时,我链接到这些库:

-lfaac-lavformat-lavcodec-lavutil-lavfilter-lswscale

问题出在哪里?

我成功地编译了。对于感兴趣的人:

首先,我禁用了一些模块(我并没有真正使用(:

/configure--enable gpl--enable libass--enable lib faac--enable libfdk aac--enable-libmp3lame\--禁用libopencore amrnb--禁用libopen core amrwb--禁用librspeex--启用-librtmp--禁用libtheora\--enable libvorbis--enable libvpx--enable-x11grab--enable-libx264--enable nonfree--enable-version 3

然后我按以下顺序链接了其余的依赖项:

-lavformat-lavcodec-lfaac-lmp3lame-lfdk-aac-lvpx-lx264-lavdevice-lyasm-lavotil-lswscale-lrtmp-lvorbisec-lva