xcode 构建错误:无法找到 clang 二进制文件的路径来定位 Address Sanitizer 库

问题描述 投票:0回答:1

当我在 Xcode(版本 15.3)中关闭 Address Sanitizer 选项时,项目构建成功。但是,一旦我启用该选项,构建就会失败,并显示错误消息:“无法找到 clang 二进制文件的路径来定位 Address Sanitizer 库。”

xcode asan 选项

xcode 构建错误

我在Xcode目录中找到了libclang_rt.asan_ios_dynamic.dylib,并将其添加到build Phases -> Link Library with Libraries中。但是,我仍然遇到同样的错误。但是当我创建一个新项目并启用 Address Sanitizer 选项时,它会成功构建。

xcode clang address-sanitizer
1个回答
0
投票

此问题是由于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++

然后 xcode 构建错误就消失了。

另外,我想知道为什么会出现CC=clang CXX=clang++的错误设置。通过查看cocoapods源代码,我发现CC和CXX并不是硬编码的。经过一番探索,我终于发现,如果项目中引用了Snappy pod库,这个问题就会重复出现。
[ [Snappy Podspec]][1]:https://i.sstatic.net/wh5eEDY8.png

最终解决方案(将这些行添加到您的 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
© www.soinside.com 2019 - 2024. All rights reserved.