cmake 脚本报错如下:
====================[ Build | ffmpeg_log | Debug ]==============================
/opt/clion-2020.2.4/bin/cmake/linux/bin/cmake --build /work/ffmpeg_doc/cmake-build-debug --target ffmpeg_log -- -j 6
Scanning dependencies of target ffmpeg_log
[ 50%] Building CXX object src/CMakeFiles/ffmpeg_log.dir/ffmpeg_log/ffmpeg_log.cpp.o
[100%] Linking CXX executable ffmpeg_log
/usr/bin/ld: CMakeFiles/ffmpeg_log.dir/ffmpeg_log/ffmpeg_log.cpp.o: in function `main':
/work/ffmpeg_doc/src/ffmpeg_log/ffmpeg_log.cpp:14: undefined reference to `av_log_set_level(int)'
/usr/bin/ld: /work/ffmpeg_doc/src/ffmpeg_log/ffmpeg_log.cpp:17: undefined reference to `av_log(void*, int, char const*, ...)'
collect2: error: ld returned 1 exit status
make[3]: *** [src/CMakeFiles/ffmpeg_log.dir/build.make:104:src/ffmpeg_log] 错误 1
make[2]: *** [CMakeFiles/Makefile2:114:src/CMakeFiles/ffmpeg_log.dir/all] 错误 2
make[1]: *** [CMakeFiles/Makefile2:121:src/CMakeFiles/ffmpeg_log.dir/rule] 错误 2
make: *** [Makefile:138:ffmpeg_log] 错误 2
使用nm工具查看库,看到库中是有对应的符号信息的
经过以上信息的确认,可以肯定如下:
- 库中肯定有对应的函数
- 链接时找不到
- 代码去掉对应函数的调用能正常运行
- 代码调用其他库能正常运行
经过以上的确认在看官方的给的FFmpeg的头文件吧,结果发现头文件上没有支持对C++代码的兼容,而本地使用的又是C++代码调用的,因此找不到对应的函数定义,一般的库都会加上extern "C"的,可能是ffmpeg对C的钟爱吧,根本没有考虑C++代码的调用
解决办法,告诉编译器这是个C代码的库的头文件,如下引用头文件就没有问题了:
在ffmpeg的头文件引用的时候加上extern “C”{}