gpt4 book ai didi

xcode - 在 Xcode 中使用 NSTask 在 AppKit 应用程序中运行时,Rust 1.4.0(或更高版本)cargo/rustc 崩溃

转载 作者:行者123 更新时间:2023-11-29 08:17:00 25 4
gpt4 key购买 nike

带有 multirust 的 Rust 1.4.0 安装在命令行上运行良好,但如果它是由 Apple AppKit 中的 NSTask 执行的,则会因信号 11 而崩溃。

我写了一些测试用例来重现它们。当前状态是;

  • 带有 NSTask 的命令行程序。这很好用。
  • 带有 NSTask 的 AppKit 应用。这总是崩溃。
  • AppKit 应用仅链接到 AppKit。应用程序中没有实际的 AppKit 代码。也会崩溃。
  • 使用 Objective-C 编写的 AppKit 应用。也会崩溃。
  • AppKit 应用使用 BSD 级别的 pty 而不是 NSTask 运行 cargo。工作正常。

使用 Homebrew 从源代码构建 Rust 安装时同样会出现此问题。Rust 1.2.0 cargo 和 rustc 不会出现此问题。他们工作得很好。如果应用程序用完 Xcode 调试器,则不会发生这种情况。所以主要原因似乎是 Xcode 调试上下文。好像设置错了。。。使用命令行 LLDB 运行应用程序不会导致问题。啊……

我正在使用 Xcode 7.1.1。

测试代码可以从这里下载:https://github.com/eonil/Rust140InAppKitCrashTestCases

最佳答案

长话短说

在启动 NSTask 之前,执行此操作。

    var envs = NSProcessInfo.processInfo().environment;
envs["DYLD_LIBRARY_PATH"] = nil
// print(NSProcessInfo.processInfo().environment["DYLD_LIBRARY_PATH"])
_remoteTask = NSTask()
_remoteTask.environment = envs

说明

有时 Xcode 会将 DYLD_LIBRARY_PATH 环境变量覆盖到非系统目录(类似于 "/Users/Eonil/Workshop/Temp/Xcode/Derivations/EditorOnly-hfhkxuguvplpqvdcinldyuivhucp/Build/Products/调试:/usr/lib/system/introspection")

并且此环境变量继承自 NSTask 实例,因为 .environment 未设置并保持为 nil

最干净的解决方案是仔细设置所有需要的环境变量。

我找不到关闭此 Xcode 行为的开关。

关于xcode - 在 Xcode 中使用 NSTask 在 AppKit 应用程序中运行时,Rust 1.4.0(或更高版本)cargo/rustc 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com