swift - 在 Ubuntu WSL 上构建 sourcekit-lsp 时出错
问题描述
我正在尝试在我的 Ubuntu WSl 上构建 sourcekit-lsp。安装成功 swift swift-5.2.5-RELEASE-ubuntu20.04
amal@DESKTOP-CJJEUS7:~/sourcekit-lsp$swift --version
Swift version 5.2.5 (swift-5.2.5-RELEASE)
Target: x86_64-unknown-linux-gnu
并且还从 master 分支克隆sourcekit-lst ,两者都安装了,按照文档sudo apt install libsqlite3-dev libncurses5-dev
中的每一步,但是在构建时我得到了这个错误。
swift build -Xcxx -I/home/amal/swift-5.2.5-RELEASE-ubuntu20.04/usr/lib/swift -Xcxx -I/home/amal/swift-5.2.5-RELEASE-ubuntu20.04/usr/lib/swift/Block
/home/amal/sourcekit-lsp/.build/checkouts/swift-package-manager/Sources/PackageLoading/ManifestLoader.swift:530:55: error: type 'JSONEncoder.OutputFormatting' has no member 'withoutEscapingSlashes' encoder.outputFormatting = [.sortedKeys, .withoutEscapingSlashes]
/home/amal/sourcekit-lsp/.build/checkouts/swift-package-manager/Sources/PackageLoading/ManifestLoader.swift:530:55: error: type 'JSONEncoder.OutputFormatting' has no member 'withoutEscapingSlashes' encoder.outputFormatting = [.sortedKeys, .withoutEscapingSlashes]
/home/amal/sourcekit-lsp/.build/checkouts/swift-package-manager/Sources/PackageLoading/ManifestLoader.swift:530:55: error: type 'JSONEncoder.OutputFormatting' has no member 'withoutEscapingSlashes' encoder.outputFormatting = [.sortedKeys, .withoutEscapingSlashes]
[137/214] Compiling Statistic.cpp
知道我做错了什么吗?请帮忙。
解决方案
当它像这样默默地失败时,通常是因为您缺少一些依赖项。确保安装所有
sudo apt-get install curl clang libicu-dev git libatomic1 libxml2 \
libcurl4 zlib1g-dev libbsd0 tzdata libssl-dev libsqlite3-dev \
libblocksruntime-dev libncurses5-dev libicu-dev libblocksruntime-dev \
libpthread-workqueue-dev -y
然后我仍然在错误的main
分支上失败sourcekit-lsp
/home/rock64/Software/sourcekit-lsp/.build/checkouts/swift-package-manager/Sources/PackageLoading/ManifestLoader.swift:548:55: error: type 'JSONEncoder.OutputFormatting' has no member 'withoutEscapingSlashes'
encoder.outputFormatting = [.sortedKeys, .withoutEscapingSlashes]
~^~~~~~~~~~~~~~~~~~~~~~
但更改为本地克隆swift-package-manager
有助于编译。我刚刚更改了项目Package.swift
文件末尾的依赖项,sourcekit-lsp
以像这样获取本地 spm
if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil {
// Building standalone.
package.dependencies += [
.package(name: "IndexStoreDB", url: "https://github.com/apple/indexstore-db.git", .branch("main")),
//.package(name: "SwiftPM", url: "https://github.com/apple/swift-package-manager.git", .branch("main")),
.package(name: "SwiftPM", path: "/home/rock64/Software/swift-package-manager"),
.package(url: "https://github.com/apple/swift-tools-support-core.git", .branch("main")),
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "0.3.0")),
]
} else {
⋮
并删除了encoder.outputFormatting = [.sortedKeys, .withoutEscapingSlashes]
文件中失败的枚举案例
swift-package-manager/Sourcswift-package-manager/Sources/PackageLoading/ManifestLoader.swiftes/PackageLoading/ManifestLoader.swift
所以现在只是encoder.outputFormatting = [.sortedKeys]
只要确保你使用你的路径并且不要忘记在本地克隆中提交更改swift-package-manager
这应该可以帮助您完成编译阶段。我可以确认服务器在 vim 和 vscode 中运行良好,但由于枚举编辑可能存在一些隐藏的故障。我稍后会进一步调查
推荐阅读
- reactjs - 为 TypeScript 定义非箭头 React 功能组件?
- python - 如何使用 cx_oracle 执行 SQL 脚本
- javascript - 编译失败。./node_modules/react-dev-utils/formatWebpackMessages.js 找不到模块:无法解析
- javascript - 通过回调将数据传回匿名函数?
- python - F'字符串字典时语法无效
- android - 指挥:弹出到控制器而不显示在视图中
- mysql - 是否可以使用 for/foreach 循环编写 MySQL 脚本并遍历 where 子句中的数字列表?
- java - 我在清理构建 Maven 项目时收到此错误
- asp.net-mvc - Server 2019 上的 ASP.NET 4.7 - HTTPS 提供 HTTP 503 - 服务不可用(适用于 Http)
- var - 使用现有变量作为 html 音频的 src 属性