MacOS下安装Vapor后构建失败:无法构建Darwin模块求助
解决MacOS上Vapor项目构建时的ncurses头文件冲突错误
Hey 兄弟,我一眼就看出你这是MacPorts和Xcode SDK的头文件冲突搞的鬼!编译器优先用了/opt/local/include里的ncurses相关文件,结果和Xcode自带的MacOS SDK不兼容,才爆出这些SCREEN类型找不到的错误。给你几个靠谱的解决办法:
临时应急方案(单次生效)
直接在终端里设置环境变量,让Xcode的SDK头文件优先级更高,然后重新构建:
# 获取当前Xcode的SDK路径 export SDKROOT=$(xcrun --show-sdk-path) # 把SDK的头文件路径设为优先查找的位置 export CPATH="$SDKROOT/usr/include" # 重新构建Vapor项目 vapor build
永久解决办法(一劳永逸)
把上面的环境变量加到你的shell配置文件里,以后每次打开终端都会自动生效:
- 打开你的shell配置文件(用zsh就是
~/.zshrc,bash就是~/.bash_profile):nano ~/.zshrc - 在文件末尾添加下面两行:
export SDKROOT=$(xcrun --show-sdk-path) export CPATH="$SDKROOT/usr/include" - 保存退出(按
Ctrl+O回车,再按Ctrl+X),然后让配置生效:source ~/.zshrc - 现在再运行
vapor build就没问题啦!
极端应急方案(不推荐长期用)
如果上面的方法都不管用,你可以临时把MacPorts的ncurses头文件移走,构建完再移回来:
# 备份并移走冲突的头文件 sudo mv /opt/local/include/unctrl.h /opt/local/include/unctrl.h.bak sudo mv /opt/local/include/ncurses.h /opt/local/include/ncurses.h.bak # 构建项目 vapor build # 构建完成后恢复头文件 sudo mv /opt/local/include/unctrl.h.bak /opt/local/include/unctrl.h sudo mv /opt/local/include/ncurses.h.bak /opt/local/include/ncurses.h
为啥会出现这个问题?
MacPorts安装的软件会把自己的头文件放到/opt/local/include,而Xcode的MacOS SDK头文件在/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSXxxx.sdk/usr/include。编译器默认会先搜/opt/local/include,结果拿到了和SDK不兼容的ncurses版本,导致找不到SCREEN这类核心类型,自然就编译失败了。我们调整CPATH就是让SDK的头文件先被找到,从根源解决冲突~
内容的提问来源于stack exchange,提问作者Raymond
相关产品推荐
相关产品推荐

