gcc:未定义的参考错误

我想使用ffmpeg / libavfilter / lavfutils.h中定义的函数’ff_load_image’。

program.c

#include "../ffmpeg/libavfilter/lavfutils.h" int main () { uint8_t* data; int linesize, width, height, log_ctx; int i = ff_load_image(&data, &linesize, &width, &height, AV_PIX_FMT_RGB24, "blue.jpg", &log_ctx); } 

运行

 gcc -I$HOME/ffmpeg/include program.c -L$HOME/ffmpeg/lib -lavfilter -lavcodec -lavutil 

给出未定义的引用错误。

 program.c: In function \u2018main\u2019: program.c:9: warning: passing argument 1 of \u2018ff_load_image\u2019 from incompatible pointer type ../ffmpeg/libavfilter/lavfutils.h:39: note: expected \u2018uint8_t **\u2019 but argument is of type \u2018uint8_t *\u2019 program.c:9: warning: passing argument 2 of \u2018ff_load_image\u2019 makes pointer from integer without a cast ../ffmpeg/libavfilter/lavfutils.h:39: note: expected \u2018int *\u2019 but argument is of type \u2018int\u2019 program.c:9: warning: passing argument 3 of \u2018ff_load_image\u2019 makes pointer from integer without a cast ../ffmpeg/libavfilter/lavfutils.h:39: note: expected \u2018int *\u2019 but argument is of type \u2018int\u2019 program.c:9: warning: passing argument 4 of \u2018ff_load_image\u2019 makes pointer from integer without a cast ../ffmpeg/libavfilter/lavfutils.h:39: note: expected \u2018int *\u2019 but argument is of type \u2018int\u2019 program.c:9: warning: passing argument 5 of \u2018ff_load_image\u2019 makes pointer from integer without a cast ../ffmpeg/libavfilter/lavfutils.h:39: note: expected \u2018enum AVPixelFormat *\u2019 but argument is of type \u2018int\u2019 program.c:9: warning: passing argument 7 of \u2018ff_load_image\u2019 makes pointer from integer without a cast ../ffmpeg/libavfilter/lavfutils.h:39: note: expected \u2018void *\u2019 but argument is of type \u2018int\u2019 /home/jamiey/ffmpeg/lib/libavfilter.a(lavfutils.o): In function `ff_load_image': /home/jamiey/ffmpeg/libavfilter/lavfutils.c:38: undefined reference to `av_register_all' /home/jamiey/ffmpeg/libavfilter/lavfutils.c:40: undefined reference to `av_find_input_format' /home/jamiey/ffmpeg/libavfilter/lavfutils.c:41: undefined reference to `avformat_open_input' /home/jamiey/ffmpeg/libavfilter/lavfutils.c:66: undefined reference to `av_read_frame' /home/jamiey/ffmpeg/libavfilter/lavfutils.c:92: undefined reference to `avformat_close_input' /home/jamiey/ffmpeg/libavfilter/lavfutils.c:92: undefined reference to `avformat_close_input' /home/jamiey/ffmpeg/libavfilter/lavfutils.c:92: undefined reference to `avformat_close_input' /home/jamiey/ffmpeg/lib/libavcodec.a(frame_thread_encoder.o): In function `ff_frame_thread_encoder_free': /home/jamiey/ffmpeg/libavcodec/frame_thread_encoder.c:225: undefined reference to `pthread_join' /home/jamiey/ffmpeg/lib/libavcodec.a(frame_thread_encoder.o): In function `ff_frame_thread_encoder_init': /home/jamiey/ffmpeg/libavcodec/frame_thread_encoder.c:200: undefined reference to `pthread_create' /home/jamiey/ffmpeg/lib/libavcodec.a(pthread_frame.o): In function `ff_frame_thread_free': /home/jamiey/ffmpeg/libavcodec/pthread_frame.c:575: undefined reference to `pthread_join' /home/jamiey/ffmpeg/lib/libavcodec.a(pthread_frame.o): In function `ff_frame_thread_init': /home/jamiey/ffmpeg/libavcodec/pthread_frame.c:705: undefined reference to `pthread_create' /home/jamiey/ffmpeg/lib/libavcodec.a(pthread_slice.o): In function `ff_slice_thread_init': /home/jamiey/ffmpeg/libavcodec/pthread_slice.c:220: undefined reference to `pthread_create' /home/jamiey/ffmpeg/lib/libavcodec.a(pthread_slice.o): In function `ff_slice_thread_free': /home/jamiey/ffmpeg/libavcodec/pthread_slice.c:118: undefined reference to `pthread_join' /home/jamiey/ffmpeg/lib/libavutil.a(rational.o): In function `av_d2q': /home/jamiey/ffmpeg/libavutil/rational.c:115: undefined reference to `log' /home/jamiey/ffmpeg/libavutil/rational.c:118: undefined reference to `floor' /home/jamiey/ffmpeg/lib/libavutil.a(eval.o): In function `eval_expr': /home/jamiey/ffmpeg/libavutil/eval.c:183: undefined reference to `trunc' /home/jamiey/ffmpeg/libavutil/eval.c:182: undefined reference to `ceil' /home/jamiey/ffmpeg/libavutil/eval.c:181: undefined reference to `floor' /home/jamiey/ffmpeg/libavutil/eval.c:241: undefined reference to `pow' /home/jamiey/ffmpeg/libavutil/eval.c:177: undefined reference to `exp' /home/jamiey/ffmpeg/libavutil/eval.c:176: undefined reference to `exp' /home/jamiey/ffmpeg/libavutil/eval.c:287: undefined reference to `pow' /home/jamiey/ffmpeg/libavutil/eval.c:278: undefined reference to `floor' /home/jamiey/ffmpeg/lib/libavutil.a(eval.o): In function `av_strtod': /home/jamiey/ffmpeg/libavutil/eval.c:112: undefined reference to `pow' /home/jamiey/ffmpeg/libavutil/eval.c:103: undefined reference to `pow' /home/jamiey/ffmpeg/libavutil/eval.c:109: undefined reference to `pow' /home/jamiey/ffmpeg/lib/libavutil.a(eval.o): In function `parse_primary': /home/jamiey/ffmpeg/libavutil/eval.c:394: undefined reference to `sinh' /home/jamiey/ffmpeg/libavutil/eval.c:395: undefined reference to `cosh' /home/jamiey/ffmpeg/libavutil/eval.c:396: undefined reference to `tanh' /home/jamiey/ffmpeg/libavutil/eval.c:397: undefined reference to `sin' /home/jamiey/ffmpeg/libavutil/eval.c:398: undefined reference to `cos' /home/jamiey/ffmpeg/libavutil/eval.c:399: undefined reference to `tan' /home/jamiey/ffmpeg/libavutil/eval.c:400: undefined reference to `atan' /home/jamiey/ffmpeg/libavutil/eval.c:401: undefined reference to `asin' /home/jamiey/ffmpeg/libavutil/eval.c:402: undefined reference to `acos' /home/jamiey/ffmpeg/libavutil/eval.c:403: undefined reference to `exp' /home/jamiey/ffmpeg/libavutil/eval.c:404: undefined reference to `log' /home/jamiey/ffmpeg/libavutil/eval.c:405: undefined reference to `fabs' collect2: ld returned 1 exit status 

但是,我成功地在其他库中运行函数,例如“ffmpeg / libavcodec / avcodec.h”中的函数。 为什么会发生这种情况发生在“ffmpeg / libavfilter / lavfutils.h”?

看起来您针对应用程序链接的库取决于其他库。 尝试添加-lpthread并查看错误计数是否发生变化。