c++ - C++项目中ffmpeg的CMake配置
问题描述
我已经使用 Homebrew 安装了 ffmpeg(第 4 版),我正在尝试在 C++ 项目中使用各种 ffmpeg 库,但在链接过程中出现多个错误。
Undefined symbols for architecture x86_64:
"_av_free", referenced from:
_main in main.cpp.o
"_av_packet_alloc", referenced from:
_main in main.cpp.o
"_av_parser_init", referenced from:
And so on ...
我已包含以下库
extern "C" {
#include <libavutil/frame.h>
#include <libavutil/mem.h>
#include <libavcodec/avcodec.h>
}
但是,这仍然行不通。我想我可能遗漏了CMakeLists.txt
文件中的某些内容,目前看起来像这样:
cmake_minimum_required(VERSION 2.6)
project(decode_encode)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "-D__STDC_CONSTANT_MACROS")
add_executable(decode_encode main.cpp)
我很可能需要指定额外的链接标志,但有没有更好的方法来处理CMakeLists.txt
文件中的链接部分?
解决方案
PkgConfig 可用于更方便地链接库,如评论中所述。使用 CMake 3.17,这将链接所有 libav 库:
cmake_minimum_required(VERSION 3.17)
project(Foo)
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET
libavdevice
libavfilter
libavformat
libavcodec
libswresample
libswscale
libavutil
)
add_executable(${PROJECT_NAME}
main.cpp
)
target_link_libraries(${PROJECT_NAME}
PkgConfig::LIBAV
)
推荐阅读
- reactjs - auth0.webAuth.authorize() 需要哪些字段?
- javascript - HTML Textarea:如何在值更改时收到通知(未触发输入事件)
- flutter - ListView 中的提供者没有被处置?
- powershell - 来自 CSV 的 New-ADUser OtherAttributes var
- rust - 使用可变迭代器进行迭代时对不可变借用执行操作
- oracle - “选择进入”期间的 PL/SQL 错误“没有足够的值”
- twilio - 如何将回复重定向到我的常规电话号码?
- python - Python + Selenium + 2Captcha
- octave - 使用 Octave 在特定值之间切割超声信号
- python - 如何使用来自 Excel 单元格的变量在 Python 上清理我的打印结果?