如何在 mac 上 link Cmake 中的 libavformat?
How to link libavformat in Cmake on mac?
我正在尝试在 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 returns:
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++ 项目中使用 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 returns:
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 接受。