Я использую учебник Dranger по ffmpeg:
http://dranger.com/ffmpeg/tutorial01.html
Я застрял, пытаясь скомпилировать первый учебник. Я скачал ffmpeg с помощью homebrew, но команда компиляции, приведенная в руководстве, не сработала:
gcc -o tutorial01 tutorial01.c -lavutil -lavformat -lavcodec -lz -lavutil -lm
Основываясь на своем опыте работы с SDL, я создал отдельный файл, который просто включал один из заголовков ffmpeg, и изменил команду компиляции на:
gcc main.c -I/usr/local/Cellar/ffmpeg/2.6.1/include
Это действительно удалось скомпилировать. Но когда я попробовал это с учебным файлом, используя эту команду:
gcc tutorial01.c -I/usr/local/Cellar/ffmpeg/2.6.1/include
Я получил эти ошибки:
Undefined symbols for architecture x86_64:
"_av_dump_format", referenced from:
_main in tutorial01-9cd32b.o
"_av_frame_alloc", referenced from:
_main in tutorial01-9cd32b.o
"_av_frame_free", referenced from:
_main in tutorial01-9cd32b.o
"_av_free", referenced from:
_main in tutorial01-9cd32b.o
"_av_free_packet", referenced from:
_main in tutorial01-9cd32b.o
"_av_malloc", referenced from:
_main in tutorial01-9cd32b.o
"_av_read_frame", referenced from:
_main in tutorial01-9cd32b.o
"_av_register_all", referenced from:
_main in tutorial01-9cd32b.o
"_avcodec_alloc_context3", referenced from:
_main in tutorial01-9cd32b.o
"_avcodec_close", referenced from:
_main in tutorial01-9cd32b.o
"_avcodec_copy_context", referenced from:
_main in tutorial01-9cd32b.o
"_avcodec_decode_video2", referenced from:
_main in tutorial01-9cd32b.o
"_avcodec_find_decoder", referenced from:
_main in tutorial01-9cd32b.o
"_avcodec_open2", referenced from:
_main in tutorial01-9cd32b.o
"_avformat_close_input", referenced from:
_main in tutorial01-9cd32b.o
"_avformat_find_stream_info", referenced from:
_main in tutorial01-9cd32b.o
"_avformat_open_input", referenced from:
_main in tutorial01-9cd32b.o
"_avpicture_fill", referenced from:
_main in tutorial01-9cd32b.o
"_avpicture_get_size", referenced from:
_main in tutorial01-9cd32b.o
"_sws_getContext", referenced from:
_main in tutorial01-9cd32b.o
"_sws_scale", referenced from:
_main in tutorial01-9cd32b.o
Я решил, что мне нужно добавить дополнительные вещи из учебника, поэтому я сделал
gcc tutorial01.c -I/usr/local/Cellar/ffmpeg/2.6.1/include -lavutil -lavformat -lavcodec -lz -lavutil -lm
Но потом я получил эту ошибку
ld: library not found for -lavutil
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [all] Error 1
Я чувствую, что каталог /usr/local/Cellar/ffmpeg/2.6.1/lib
может иметь значение, он включает файлы:
libavcodec.56.26.100.dylib libavresample.dylib
libavcodec.56.dylib libavutil.54.20.100.dylib
libavcodec.a libavutil.54.dylib
libavcodec.dylib libavutil.a
libavdevice.56.4.100.dylib libavutil.dylib
libavdevice.56.dylib libpostproc.53.3.100.dylib
libavdevice.a libpostproc.53.dylib
libavdevice.dylib libpostproc.a
libavfilter.5.11.102.dylib libpostproc.dylib
libavfilter.5.dylib libswresample.1.1.100.dylib
libavfilter.a libswresample.1.dylib
libavfilter.dylib libswresample.a
libavformat.56.25.101.dylib libswresample.dylib
libavformat.56.dylib libswscale.3.1.101.dylib
libavformat.a libswscale.3.dylib
libavformat.dylib libswscale.a
libavresample.2.1.0.dylib libswscale.dylib
libavresample.2.dylib pkgconfig
libavresample.a
Я часто действительно теряюсь, пытаясь скомпилировать загруженные библиотеки (мне потребовалось много времени, чтобы скомпилировать SDL, и когда я, наконец, заставил его работать, я все еще не совсем понял, почему).
Если бы кто-нибудь мог помочь мне понять, как все это работает, и, в частности, помочь мне скомпилировать этот первый учебник, я был бы чрезвычайно благодарен.
Спасибо за ваше время.