gcc:链接外部库

问题描述 投票:0回答:3

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

跑步

gcc program.c -L$HOME/ffmpeg/lib/libavfilter.a -L$HOME/ffmpeg/lib/libavcodec.a

给我一个错误

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

拼写正确并且函数已定义。为什么会出现这种情况?

程序.c

#include <stdio.h>

int main (int args, char *argv[])
{
 avcodec_register_all();
}
c++ c gcc
3个回答
4
投票

是这样的

gcc -static -lavfilter -lavcodec -L/HOME/ffmpeg/lib/

您需要包含该文件

avcodec.h
并将该文件的路径添加到 gcc 的包含路径标志中。

gcc -static -lavfilter -lavcodec -L$HOME/ffmpeg/lib/ -I$HOME/ffmpeg/include

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


0
投票

-lavcodec
与 gcc 的现有参数一起使用


0
投票

原因之一可能是函数

avcodec_register_all()
是在C++文件中定义的。它应该被定义为
extern "C"
中的
avcodec.h
并且库应该用这个正确的
avcodec.h
来编译。

© www.soinside.com 2019 - 2024. All rights reserved.