В program.c, я хотел бы использовать метод 'avcodec_register_all()', определенный в libavcodec/avcodec.h.
Бег
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
Правописание правильное и функция определена. Почему это происходит?
program.c
#include <stdio.h>
int main (int args, char *argv[])
{
avcodec_register_all();
}
Это так
gcc -static -lavfilter -lavcodec -L/HOME/ffmpeg/lib/
Вам нужно включить файл avcodec.h
а также добавить путь к этому файлу в свои флаги include path для gcc.
gcc -static -lavfilter -lavcodec -L$HOME/ffmpeg/lib/ -I$HOME/ffmpeg/include
Статичность задается, потому что вы пытаетесь использовать библиотеку *.a, а не *.so (динамический).
Одна из причин может заключаться в том, что функция avcodec_register_all()
определена в файле C++. Он должен быть определен как extern "C"
в avcodec.h
и библиотека должна быть скомпилирована с помощью этого надлежащего avcodec.h
.
Используйте -lavcodec
с существующими параметрами для gcc
-L$HOME/ffmpeg/lib/ -lavfilter -lavcodec