我想编译一下。

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_size。为什么会这样呢?

最佳答案


不,因为 header (<libavcodec/avcodec.h>)只是声明了
定义在库本身中。
因此,您可能希望在调用gcc时添加链接器选项以链接libavcodec:

-lavcodec

另请注意,需要在库文件之后在命令行上指定库:
gcc -I$HOME/ffmpeg/include program.c -lavcodec
不是:
gcc -lavcodec -I$HOME/ffmpeg/include program.c

引用Wyzard的注释,完整的命令可能如下所示:
gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavcodec
对于未存储在链接器标准位置中的库,选项-L指定使用-l选项指定的查找库的附加搜索路径,在这种情况下为libavcodec.x.y.z

有关GCC链接器选项please read here的详细引用。

09-06 00:09