0

我正在做一个项目,我必须创建一个简单的 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

但是,一旦我尝试av_register_all()在自己的 C 代码中使用和其他一些关键函数,就会收到以下错误:

Undefined symbols for architecture x86_64:
  "_av_register_all", referenced from:
      _main in base-bPKLay.o

我曾尝试使用gcc -Wall base.c -o baseas 和编译它clang -Wall base.c -o base,但都给出了上述错误。我担心库的链接方式有问题,但我对 C 编程的经验不足,不知道下一步该往哪里看。当我删除av_register_all()调用时,C 代码本身编译得很好。

libavformat 的包含如下所示:#include "libavformat/avformat.h"

任何帮助表示赞赏。我尝试添加-arch x86_64到 CFLAGS 导出,但没有任何区别。

4

1 回答 1

2

出现未定义符号错误是因为您没有告诉链接器链接到 libav。

尝试使用gcc -Wall -o base -lav base.c. 该-l标志告诉链接器使用 libav 库。

请注意,使用标志时会省略lib部分!-l

于 2013-06-10T13:48:30.020 回答