c - 在 C 代码中使用 libavformat,未定义的 x86_64 符号

标签 c macos libav libavformat

我正在做一个项目,我必须创建一个简单的 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 baseclang -Wall base.c -o base 编译它,但两者都给出了以上错误。我担心库的链接方式有问题,但我对 C 编程的总体经验还不够丰富,不知道下一步该往哪里看。当我删除 av_register_all() 调用时,C 代码本身可以正常编译。

libavformat 的包含看起来像这样:#include "libavformat/avformat.h"

感谢任何帮助。我尝试将 -arch x86_64 添加到 CFLAGS 导出,但没有任何区别。

最佳答案

出现 undefined symbol 错误是因为您没有告诉链接器链接到 libav。

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

请注意,在使用 -l 标志时,lib 部分被忽略了!

关于c - 在 C 代码中使用 libavformat,未定义的 x86_64 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17025373/

相关文章:

c++ - 销毁未初始化的 FFTW 计划是否安全?

macos - 安装 IO(语言)时出错

android - 适用于 Mac 的 NDK r10b 32 和 64 位构建器

ffmpeg - libavcodec 初始化实现实时播放,必要时丢帧

ffmpeg - 无需命令行即可使用 libav?

c - 不理解 *p[3] 和 (*p)[3] 之间的区别

c - 优化 C 中的简单字符串搜索

c++ - 在 8 位和 32 位值之间加载/存储

python - OSX Python系统框架意外覆盖

c - av_find_best_stream 与 avcodec_find_decoder 的解码器返回