Xcode升级后编译报错:Use of undeclared identifier 'strchr'及cstring函数缺失问题
解决方案
- 第一步:调整头文件搜索路径配置
打开项目的Header Search Paths设置,确认如下配置:- 把默认参数
$(inherited)放在所有自定义搜索路径的最前位,保证系统默认路径优先级最高 - 所有自定义搜索路径、第三方库头路径的搜索模式都改为
非递归(non-recursive),避免递归搜索时匹配到和系统标准库重名的自定义头文件(比如第三方库自带的string.h会覆盖系统标准库的同名头,导致C++标准库找不到全局函数实现)
- 把默认参数
- 第二步:检查xcconfig配置
打开你编译时指定的ObjCHelper.xcconfig文件,排查是否有如下错误配置:- 手动指定了
HEADER_SEARCH_PATHS添加了系统根目录下的/usr/include等路径 OTHER_CFLAGS/OTHER_CXXFLAGS中添加了-I参数强制指定自定义头路径优先级高于系统路径SDKROOT参数被设置为错误的SDK路径
- 手动指定了
- 第三步:清理残留Xcode配置与缓存
执行如下操作清除旧版本残留的缓存与工具链配置:- 执行命令删除Xcode缓存目录:
rm -rf ~/Library/Developer/Xcode/DerivedData rm -rf ~/Library/Caches/com.apple.dt.Xcode- 如果你安装了独立的CommandLineTools,先执行删除:
sudo rm -rf /Library/Developer/CommandLineTools- 执行命令指定当前工具链为Xcode内置路径:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer- 重启终端后重新执行编译
- 第四步:排查全局环境变量
终端执行echo $CPATH $CFLAGS $CXXFLAGS,如果输出非空的头路径配置,说明你的shell配置文件(~/.zshrc/~/.bash_profile/~/.profile)中导出了全局的编译环境变量,这些变量会强制编译器优先搜索指定路径,覆盖Xcode的默认配置,删除对应导出配置后重启终端即可。 - 第五步:验证编译参数
如果问题仍未解决,可以在xcodebuild命令末尾添加-verbose参数执行编译,查看完整的clang调用参数,确认-I指定的头路径顺序是否符合预期,自定义路径是否排在系统SDK路径之前。
内容的提问来源于stack exchange,提问作者user1725145
相关产品推荐
相关产品推荐

