在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,然后从documentation开始,但是在构建时出现了这个错误

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]
[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的{​​{1}}分支上失败,并显示错误

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文件末尾的依赖关系,以像这样来源本地spm

sourcekit-lsp

并删除文件中失败的枚举案例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",.package(name: "SwiftPM",path: "/home/rock64/Software/swift-package-manager"),.package(url: "https://github.com/apple/swift-tools-support-core.git",.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]

中进行更改

这应该使您进入编译阶段。我可以确认服务器在vim中运行并且vscode正常,但是由于枚举编辑可能存在一些隐患。我稍后会进一步调查