Macos下链接frameworks报错:clang: error: no such file or directory: ‘AudioToolbox‘

涂玉韵
2023-12-01

在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呢?

走过路过的,如有知其所以然的或者有思路的还望指点一二

 类似资料: