Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 1.4.0(或更高版本)cargo/rustc在Xcode中使用NSTask在AppKit应用程序中运行时崩溃_Xcode_Cocoa_Rust_Appkit_Rust Cargo - Fatal编程技术网

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

Rust 1.4.0(或更高版本)cargo/rustc在Xcode中使用NSTask在AppKit应用程序中运行时崩溃,xcode,cocoa,rust,appkit,rust-cargo,Xcode,Cocoa,Rust,Appkit,Rust Cargo,带multirust的Rust 1.4.0安装在命令行上运行良好,但如果由Apple AppKit中的NSTask执行,则会在信号11下崩溃 我写了一些测试用例来复制它们。目前的状态是 带有NSTask的命令行程序。这个很好用 带有NSTask的AppKit应用程序。这总是崩溃 AppKit应用程序仅链接到AppKit。应用中没有实际的应用套件代码。也会崩溃 AppKit应用程序在Objective-C中编写。也会崩溃 使用BSD级别pty而不是NSTask运行货物的AppKit应用程序。很好

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

我写了一些测试用例来复制它们。目前的状态是

  • 带有NSTask的命令行程序。这个很好用
  • 带有NSTask的AppKit应用程序。这总是崩溃
  • AppKit应用程序仅链接到AppKit。应用中没有实际的应用套件代码。也会崩溃
  • AppKit应用程序在Objective-C中编写。也会崩溃
  • 使用BSD级别pty而不是NSTask运行货物的AppKit应用程序。很好
通过使用自制软件从源代码构建,此问题同样会发生。 Rust 1.2.0 cargo和rustc不会出现此问题。他们工作得很好。 如果应用程序运行完Xcode调试器,则不会发生这种情况。所以主要原因似乎是Xcode调试上下文。似乎它设置了一些错误。。。 使用命令行LLDB运行应用程序不会导致问题。啊

我使用的是Xcode 7.1.1

测试代码可以从这里下载:

TL;博士 在启动
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\u LIBRARY\u PATH
环境变量覆盖到非系统目录(类似于
“/Users/Eonil/Workshop/Temp/Xcode/Derivations/EditorOnly hfhkxuguplpqvdcinldyuivhucp/Build/Products/Debug:/usr/lib/system/introspection”

这个环境变量被继承到
NSTask
实例,因为
.environment
没有被设置,并且保持为
nil

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

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