I write to test ffmpeg and call ffmpeg function, but it alwasy tell me link err: can not found ffmpeg function: this is my code:
#ifdef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
#ifndef INT64_C
#define INT64_C(c) (c ## LL)
#define UINT64_C(c) (c ## ULL)
#endif
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
static const char *src_filename = NULL;
static const char *video_dst_filename = NULL;
static const char *audio_dst_filename = NULL;
static AVFormatContext *fmt_ctx = NULL;
int main(int argc, char **argv) {
int ret = 0;
if (argc != 4) {
fprintf(stderr, "usage: %s input_file video_output_file audio_output_file\n"
"API example program to show how to read frames from an input file.\n"
"This program reads frames from a file, decodes them, and writes decoded\n"
"video frames to a rawvideo file named video_output_file, and decoded\n"
"audio frames to a rawaudio file named audio_output_file.\n",
argv[0]);
exit(1);
}
// src_filename = argv[1];
src_filename = "/tmp/a.mp4";
video_dst_filename = argv[2];
audio_dst_filename = argv[3];
/* open input file, and allocate format context */
if (avformat_open_input(&fmt_ctx, src_filename, NULL, NULL) < 0) {
fprintf(stderr, "Could not open source file %s\n", src_filename);
exit(1);
}
avformat_close_input(&fmt_ctx);
}
the follow is build command:
clang++ -I /usr/local/apps/homebrew/Cellar/ffmpeg/4.4_1/include/ -L/usr/local/apps/homebrew/Cellar/ffmpeg/4.4_1/lib -lavformat main.cpp
and the terminal output:
Undefined symbols for architecture x86_64:
"avformat_open_input(AVFormatContext**, char const*, AVInputFormat*, AVDictionary**)", referenced from:
_main in main-f2a6f0.o
"avformat_close_input(AVFormatContext**)", referenced from:
_main in main-f2a6f0.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
then Who can tell me why.