正确添加darwin.apple_sdk到nix-shell

问题描述 投票:0回答:2

我曾多次遇到这些问题,但尚未找到解决方案。我的环境安装了 Xcode 命令行工具,但自从安装 Nix 以来,Clang 一直很难找到 macOS SDK 框架。我知道这些都存在,就好像我切换到尚未安装 Nix 的新用户一样,我能够毫无问题地构建这些。

举个例子,

{very long command invocation snipped}
/Users/paulcolusso/Developer/heartbeat/server2/target/debug/deps/libsqlx_macros-95911fe3462937f2.dylib" "-Wl,-dead_strip" "-dynamiclib" "-Wl,-dylib" "-nodefaultlibs"
  = note: ld: framework not found SystemConfiguration
          clang-11: error: linker command failed with exit code 1 (use -v to see invocation)


error: could not compile `sqlx-macros` due to previous error

我发现 macOS SDK 派生确实存在,例如 following from the nix discourse 并添加

darwin.apple_sdk.frameworks.SystemConfiguration
派生确实解决了问题。问题如何使 macOS 框架可在 Nix 环境中 clang?也涉及到这一点。

话虽这么说,根据需要慢慢添加每个框架是有点耗时的。有没有办法将整个

apple_sdk
派生安装到我的家庭管理器或我可以放入的 nix-shell 中?如果不是这样,有一种方法可以逃离 Nix 沙箱而不需要保留另一个用户帐户吗?

nix
2个回答
3
投票

有没有办法将整个 apple_sdk 派生安装到我的家庭管理器或我可以放入的 nix-shell 中?

否/是。您可以编写一些代码来收集所有属性并添加它们,或者只是从 https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/darwin/apple-sdk/frameworks.nix

复制它们

如果不是这样,有一种方法可以逃离 Nix 沙箱而无需保留其他用户帐户吗?

您可以使用

sandbox = false
中的
nix.conf
禁用它(https://nixos.org/manual/nix/stable/command-ref/conf-file.html#:~:text=Default%3A%20false- ,sandbox,-If%20set%20to),但请记住,这大多未经测试,并且在 Linux 上,有些东西只能在沙箱中构建。


0
投票

对于用 google 搜索这个问题的人,在苹果 M2 上使用 nix 和 Rust,将其添加到你的 flake.nix 中为我解决了这个问题:

            nativeBuildInputs = with pkgs; [
              rustToolchain
              darwin.apple_sdk.frameworks.Foundation
              # list of frameworks in case you need another: https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/darwin/apple-sdk/frameworks.nix
            ];
© www.soinside.com 2019 - 2024. All rights reserved.