在使用 g++ 编译器链接 FFmpeg 的静态库时经常出现 Undefined symbols 错误。
编译命令示例如下:
g++ -o main main.cc -lavutil -lavcodec -lavformat -lavfilter -lavdevice;
错误示例如下:
Undefined symbols for architecture x86_64:
"_AudioObjectGetPropertyData", referenced from:
_at_write_header in libavdevice.a(audiotoolbox.o)
"_AudioObjectGetPropertyDataSize", referenced from:
_at_write_header in libavdevice.a(audiotoolbox.o)
这一般是因未指定对应的 framework 所致。
我们向上述编译命令中添加 -v 参数
g++ -v -o main main.cc -lavutil -lavcodec -lavformat -lavfilter -lavdevice;
执行后,会输出头文件的搜索路径,示例如下:
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDK

在使用g++编译包含FFmpeg的项目时,遇到Undefined symbols错误通常是因为缺少链接某些框架。通过添加-v参数查看编译器的搜索路径,找出缺失的framework,例如CoreAudio。然后在编译命令中添加-framework CoreAudio来解决这个问题。正确编译命令为:g++ -omainmain.cc -lavutil -lavcodec -lavformat -lavfilter -lavdevice -framework CoreAudio。
最低0.47元/天 解锁文章
1234

被折叠的 条评论
为什么被折叠?



