繁体   English   中英

ffmpeg - 使用g ++编译问题

[英]ffmpeg - compilation problem with g++

我正在尝试运行一个使用ffmpeg库来解码mp3文件的程序。 我正在使用以下选项来编译程序:

g++ -c play.cpp -o play.o
g++ -o play play.o -L/usr/local/lib -lavutil -lavcodec -lavformat -lavdevice \
                   -lavfilter -ldl -lasound -L/usr/lib -lSDL -lpthread -lz -lswscale -lm

但是在链接时我遇到了以下错误:

play.cpp:(.text+0x49): undefined reference to `av_dup_packet(AVPacket*)'
play.cpp:(.text+0x66): undefined reference to `av_malloc(unsigned int)'
play.cpp:(.text+0x324): undefined reference to `avcodec_decode_audio3(AVCodecContext*, short*, int*, AVPacket*)'
play.cpp:(.text+0x387): undefined reference to `av_free_packet(AVPacket*)'

...这些报告的函数在libavcodec.a等中可用,我已经使用链接选项指定了这些函数。 任何人都可以告诉我这里可能有什么问题或建议如何调试这个?

这是您自己的程序,而不是libav标准示例吗? 我可能错了,但如果是这样,你可能忘记在包含libav标题的同时指定extern“C”:

extern "C"
{
#include <avcodec.h>
#include <avformat.h>
}

这可能是问题'因为你试图用C ++编译器编译源代码而libav(ffmpeg)是用C编译器编译的,所以你必须使用extern C标记由C编译器编译的库的include头。

如果你已经将包含标记为extern C,请从你的程序中发布一些代码块来查看..

你应该确保使用详细的linkin( -Wl,--verbose )选择正确版本的-lavcodec ,并检查objdump或ldd是否真的在库中。

您可以尝试切换-l标志的顺序,这些非常重要; 但是,由于play.cpp包含对-lavcodec函数的-lavcodec ,因此标志顺序已经正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM