我想编译这个.

program.c

#include <libavcodec/avcodec.h>

int main(){
    int i = avpicture_get_size(AV_PIX_FMT_RGB24,300,300);
}

运行此程序

gcc -I$HOME/ffmpeg/include program.c

给出错误

/tmp/ccxMLBme.o: In function `main':
program.c:(.text+0x18): undefined reference to `avpicture_get_size'
collect2: ld returned 1 exit status

但是,avpicture_get_大小是有定义的.为什么会这样?

推荐答案

但是,avpicture_get_大小是有定义的.

没有,因为标题(<libavcodec/avcodec.h>)只是declares.

definition本在图书馆里.

因此,在调用gcc时,您可能希望将linker选项添加到link libavcodec:

-lavcodec

还请注意,需要在命令行after中指定需要的库文件:

gcc -I$HOME/ffmpeg/include program.c -lavcodec

Not像这样:

gcc -lavcodec -I$HOME/ffmpeg/include program.c

参考100的注释,完整的命令可能如下所示:

gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec

对于未存储在链接器标准位置的库,选项-L指定使用-l选项指定的查找库的附加搜索路径,在本例中为libavcodec.x.y.z.


有关GCC链接器选项please read here的详细参考信息.

C++相关问答推荐

C中出现分段错误后关闭文件

当打印字符串时,为什么在c中没有使用常量限定符时我会收到警告?

从组播组地址了解收到的数据包长度

C编译器是否遵循restrict的正式定义?

变量>;-1如何在C中准确求值?

为什么内核使用扩展到前后相同的宏定义?

C中的指针增量和减量(*--*++p)

用gcc-msse 2编译的C程序包含AVX 1指令

如何编写一个for循环来计算C中各项的总和?

为什么函数是按照定义的顺序执行的,而不是按照从avr-c中的int main()调用的顺序执行的?

如何将C中的两个字符串与从文件接收的字符串中的字符数进行比较

用C++构建和使用DLL的困惑

将数字的每一位数平方,并使用C将它们连接为一个数字(程序不能正确处理0)

有没有一种方法可以用C创建保留限定符的函数?

如何在C宏定义中包含双引号?

Linux/C:带有子进程的进程在添加waitid后都挂起

存储和访问指向 struct 的指针数组

为什么一个在线编译器拒绝这个VLA代码,而本地的Apple clang却不拒绝;t?

Makefile - 将 .o 文件放入子文件夹中

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?