gcc:链接外部库

jam*_*e_y 0 c c++ compiler-construction gcc

在program.c中,我想使用libavcodec/avcodec.h中定义的方法'avcodec_register_all()'.

运行

gcc program.c -L$HOME/ffmpeg/lib/libavfilter.a -L$HOME/ffmpeg/lib/libavcodec.a
Run Code Online (Sandbox Code Playgroud)

给我一个错误

/tmp/ccNeQywU.o: In function `main':
program.c:(.text+0x3f): undefined reference to `avcodec_register_all'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

拼写正确,功能已定义.为什么会这样?

program.c

#include <stdio.h>

int main (int args, char *argv[])
{
 avcodec_register_all();
}
Run Code Online (Sandbox Code Playgroud)

Cla*_*dgz 5

就是这样

gcc -static -lavfilter -lavcodec -L/HOME/ffmpeg/lib/
Run Code Online (Sandbox Code Playgroud)

您需要包含该文件,avcodec.h并在包含路径标志的gcc中添加该文件的路径.

gcc -static -lavfilter -lavcodec -L$HOME/ffmpeg/lib/ -I$HOME/ffmpeg/include
Run Code Online (Sandbox Code Playgroud)

给出静态是因为您尝试使用*.a库而不是*.so(动态).