gpt4 book ai didi

c++ - 如何在mac上的Cmake中链接libavformat?

转载 作者:行者123 更新时间:2023-12-04 23:07:47 24 4
gpt4 key购买 nike

我正在尝试在 C++ 项目中使用来自 ffmpeg 的 libavformat。我已经使用自制软件安装了 ffmpeg。

我的 CMakeLists.txt :

cmake_minimum_required(VERSION 3.14)
project(av_test)

set(CMAKE_CXX_STANDARD 11)

INCLUDE_DIRECTORIES(/usr/local/Cellar/ffmpeg/4.2.1_2/include)
LINK_DIRECTORIES(/usr/local/Cellar/ffmpeg/4.2.1_2/lib)

add_executable(av_test main.cpp)

TARGET_LINK_LIBRARIES(av_test libavformat)

运行 cmake 时出现此错误:
ld: library not found for -llibavformat
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [av_test] Error 1
make[2]: *** [CMakeFiles/av_test.dir/all] Error 2
make[1]: *** [CMakeFiles/av_test.dir/rule] Error 2
make: *** [av_test] Error 2

快速 find libavformat*进入/usr/local/Cellar/ffmpeg/4.2.1_2/lib 返回:
libavformat.58.29.100.dylib
libavformat.58.dylib
libavformat.a
libavformat.dylib

也在 /usr/local/Cellar/ffmpeg/4.2.1_2/include/libavformat avformat.h

我的 main.cpp:
#include <libavformat/avformat.h>

int main() {

AVFormatContext *pFormatContext;

return 0;
}

我在 mac os 10.14 上运行 cmake 版本 3.15.5 ,ffmpeg 版本 4.2.1

最佳答案

这里的问题是从错误中注意到的:

ld: library not found for -llibavformat

正如你所看到的,它有'-l'和'lib'作为前缀,即使'-l'应该在库名之前替换'lib'。似乎 TARGET_LINK_LIBRARIES 函数使用自动附加前缀 -l(或 lib)解析库名称。因此,您需要编写以下任一内容:
TARGET_LINK_LIBRARIES(av_test avformat) TARGET_LINK_LIBRARIES(av_test -lavformat)
在开始时添加 -l 并没有什么不同,但仍然被 cmake 接受。

关于c++ - 如何在mac上的Cmake中链接libavformat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59109722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com