[英]Using libavformat in C code, undefined x86_64 symbols
我正在开发一个项目,我必须创建一个简单的C程序,它利用libavformat
将文件从一种格式转换为另一种格式。
我正在使用OS X(10.8.3)并通过以下步骤安装了libav
。
首先,使用Homebrew安装依赖项:
brew install yasm zlib faac lame speex libogg libvorbis theora libvpx x264
XviD openjpeg opencore-amr freetype
接下来,从这里下载libav: http ://libav.org/download.html(使用libav 9 "plain 9"
发布)
最后,使用以下命令进行配置:
export CFLAGS="-I/usr/local/Cellar/openjpeg/1.5.1/include/openjpeg-1.5/ -I/usr/local/Cellar/lame/3.99.5/include/lame/"
./configure --enable-gpl --enable-libx264 --enable-libxvid --enable-version3
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-nonfree
--enable-libfaac --enable-libmp3lame --enable-libspeex --enable-libvorbis
--enable-libtheora --enable-libvpx --enable-libopenjpeg --enable-libfreetype
--enable-doc --enable-gnutls --enable-shared --arch=x86_64
所有内容都能正确编译,并提供支持的编解码器,编码器,解码器,复用器,解复用器等列表。
然后我运行make && sudo make install
。
但是,一旦我尝试在我自己的C代码中使用av_register_all()
和一些其他关键函数,我会收到以下错误:
Undefined symbols for architecture x86_64:
"_av_register_all", referenced from:
_main in base-bPKLay.o
我尝试使用gcc -Wall base.c -o base
以及clang -Wall base.c -o base
编译它,但两者都给出了上述错误。 我担心库的链接方式有问题,但我对C编程的经验不足以了解下一步要查看的位置。 当我删除av_register_all()
调用时,C代码本身编译得很好。
libavformat的#include "libavformat/avformat.h"
如下所示: #include "libavformat/avformat.h"
任何帮助表示赞赏。 我已经尝试将-arch x86_64
添加到CFLAGS导出中,但它没有任何区别。
发生未定义的符号错误是因为您没有告诉链接器链接libav。
尝试使用gcc -Wall -o base -lav base.c
-l
标志告诉链接器使用libav库。
请注意,使用-l
标志时, lib部分被省略了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.