当我在 Xcode(版本 15.3)中关闭 Address Sanitizer 选项时,项目构建成功。但是,一旦我启用该选项,构建就会失败,并显示错误消息:“无法找到 clang 二进制文件的路径来定位 Address Sanitizer 库。”
我在Xcode目录中找到了libclang_rt.asan_ios_dynamic.dylib,并将其添加到build Phases -> Link Library with Libraries中。但是,我仍然遇到同样的错误。但是当我创建一个新项目并启用 Address Sanitizer 选项时,它会成功构建。
此问题是由于CC和CXX宏设置不正确造成的。当我们检查 Pods-[TargetName]-debug.xcconfig 文件时,我发现 CC 设置为 clang,CXX 设置为 clang++。
打开一个终端,输入
xcodebuild -find clang
和 xcodebuild -find clang++
,就可以得到 clang 和 clang++ 的真实路径。
我手动修改了 Pods-[TargetName]-debug.xcconfig 文件:CC = /Applications/Xcode-15.3.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CXX = /Applications/Xcode-15.3.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
。 最终解决方案(将这些行添加到您的 Podfile 中):
pre_install do |installer|
fix_cc_cxx_macro_path installer
end
def fix_cc_cxx_macro_path(installer)
installer.pod_targets.each do |pod_target|
pod_target.specs.each do |spec|
next if spec.attributes_hash['xcconfig'].nil?
if spec.attributes_hash.dig('xcconfig', 'CC')
spec.attributes_hash['xcconfig']['CC'] = `xcodebuild -find clang`
end
if spec.attributes_hash.dig('xcconfig', 'CXX')
spec.attributes_hash['xcconfig']['CXX'] = `xcodebuild -find clang++`
end
end
end
end