我做了这样的程序。
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include "libavformat/avformat.h"
5
6 int main (int argc, char* argv[]){
7 av_register_all();
8 return 0;
9 }
我的头文件位于
root@ubuntu:/home/juneyoungoh/getDuration# find / -name "avformat.h"
/root/ffmpeg/libavformat/avformat.h
/usr/local/include/libavformat/avformat.h
然后我使用gcc getDuration.c
,但我会显示如下信息。
root@ubuntu:/home/juneyoungoh/getDuration# gcc getDuration.c
/tmp/ccwjonqH.o: In function `main':
getDuration.c:(.text+0x10): undefined reference to `av_register_all'
collect2: ld returned 1 exit status
坦率地说,我不知道是什么造成的。
感谢您的回答。
==========================编辑#1 ================== =========
当我“ls / usr / local / lib”时,我明白了。
root@ubuntu:/home/juneyoungoh/getDuration# ls /usr/local/lib/
libavcodec.a libavutil.a libopus.la libvpx.a python2.7
libavdevice.a libfdk-aac.a libpostproc.a libx264.a
libavfilter.a libfdk-aac.la libswresample.a libyasm.a
libavformat.a libopus.a libswscale.a pkgconfig
你可以在最后一行的第一行看到libavformat.a。
所以,如果我按照你的建议命令,我会在下面。
/root/ffmpeg/libavformat/vqf.c:244: undefined reference to `av_free_packet'
/usr/local/lib//libavformat.a(vqf.o): In function `add_metadata':
/root/ffmpeg/libavformat/vqf.c:58: undefined reference to `av_malloc'
/root/ffmpeg/libavformat/vqf.c:64: undefined reference to `av_dict_set'
/usr/local/lib//libavformat.a(vqf.o): In function `vqf_read_header':
/root/ffmpeg/libavformat/vqf.c:148: undefined reference to `av_dict_set'
/root/ffmpeg/libavformat/vqf.c:208: undefined reference to `av_log'
/root/ffmpeg/libavformat/vqf.c:216: undefined reference to `av_malloc'
/root/ffmpeg/libavformat/vqf.c:170: undefined reference to `av_log'
/root/ffmpeg/libavformat/vqf.c:121: undefined reference to `av_log'
/root/ffmpeg/libavformat/vqf.c:184: undefined reference to `av_log'
/root/ffmpeg/libavformat/vqf.c:136: undefined reference to `av_log'
/usr/local/lib//libavformat.a(wavenc.o): In function `wav_write_trailer':
/root/ffmpeg/libavformat/wavenc.c:210: undefined reference to `av_rescale'
/usr/local/lib//libavformat.a(wavenc.o): In function `wav_write_packet':
/root/ffmpeg/libavformat/wavenc.c:181: undefined reference to `av_log'
太长了,所以我只发布了一小部分内容。
我认为libavformat的所有链接都已被破坏,但我不知道
我该怎么做才能解决这个问题。
我已经安装了他们的官方链接说。
https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuideQuantal
答案 0 :(得分:0)
您有链接错误;不是编译错误。您需要使用-l选项指定库文件。我认为应该是:
gcc getDuration.c -lavformat
如果不起作用,请将libavformat的位置指定为
gcc -L/usr/local/lib getDuration.c -lavformat
答案 1 :(得分:0)
我发现我的代码有什么问题(确切地说,不是代码,而是环境)。
要执行该代码,我需要额外的库,名为“libavformat-dev”。
就我而言,由于我是Ubuntu 12.04用户,我的命令如下。
apt-get install libavformat-dev
对我这样的耻辱:(