在macos(10.15)上使用cmake构建项目,链接ffmpeg静态库,报出如下错误:
[build] clang : error: no such file or directory: 'AudioToolbox'
[build] clang : error: no such file or directory: 'CoreAudio'
[build] clang : error: no such file or directory: 'AVFoundation'
[build] clang : error: no such file or directory: 'CoreVIdeo'
[build] clang : error: no such file or directory: 'CoreMedia'
[build] clang : error: no such file or directory: 'CoreGraphics'
...
这些是macos的framework,ffmepg编译的静态库依赖他们,
% pkg-config --libs libavdevice
-L/usr/local/ffmpeg/lib -L/usr/local/lib -L/usr/local/ffmpeg/lib -lavdevice -framework Foundation -framework AudioToolbox -framework CoreAudio -lm -framework AVFoundation -framework CoreVideo -framework CoreMedia -framework CoreGraphics -framework AudioToolbox -pthread -lSDL2 -lavfilter -framework OpenGL -pthread -lm -framework CoreImage -framework AppKit -lswscale -lm -lavformat -lm -lbz2 -lz -Wl,-framework,CoreFoundation -Wl,-framework,Security -lavcodec -liconv -lm -llzma -lz -framework AudioToolbox -pthread -framework VideoToolbox -framework CoreFoundation -framework CoreMedia -framework CoreVideo -framework CoreServices -lswresample -lm -lavutil -pthread -lm -framework VideoToolbox -framework CoreFoundation -framework CoreMedia -framework CoreVideo -framework CoreServices
讲道理,这些framework都是系统路径,不存在找不到的情况,况且还是cmake构建的(不是号称cross make么),自己去对应的路径下查找发现也确实存在:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks
关于这个问题在网上找了块一周,网友的方法大多是xcode环境配置的问题,可咱这不是没用xcode么。。。 找了一大圈没结果,关键是对cmake底层原理并不懂,于是乎想到不用cmake,直接用clang编译链接,发现居然是ok的!!!
so, cmake的问题?
首先声明一点,我的cmake是用brew安装的,既然感觉有问题,那就删掉,直接从官网安装
呵, 您猜怎么着,还真特么就ok了。。。
这个确实没想明白为啥,好歹问题解决了,希望能帮到其他人
另外附上CMakeLists.txt关键部分:
cmake_minimum_required(VERSION 3.10)
PROJECT(testFFMpeg)
include(FindPkgConfig)
find_package(PkgConfig REQUIRED)
SET(ENV{PKG_CONFIG_PATH} /usr/local/ffmpeg/lib/pkgconfig/)
pkg_check_modules(ffmpeg REQUIRED IMPORTED_TARGET libavutil)
ADD_EXECUTABLE(testFFMpegDemo main.cpp)
target_link_libraries(testFFMpegDemo PRIVATE PkgConfig::ffmpeg)
官网安装的cmake是在/Application目录下,难道就因为这个原因? 可是cmake它为啥会影响到make或者clang呢?
走过路过的,如有知其所以然的或者有思路的还望指点一二