如何使 macOS 框架可在 Nix 环境中 clang?

2023-11-25

我在 macOS 10.13.5 上学习 Rust 编程,并使用 Nix 来控制我的开发环境。

一些行动,例如包括jsonwebtoken库或安装cargo-watch模块,导致构建需要似乎未安装的 macOS 框架。我收到此错误消息:

  = note: ld: framework not found CoreServices
          clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)

error: aborting due to previous error

error: failed to compile `cargo-watch v6.0.0`, intermediate artifacts can be found at `/var/folders/13/84dj8yr54_1c_pn0s8n7444h0000gn/T/cargo-install.lYPZaEduUBdu`

Caused by:
  Could not compile `cargo-watch`.

这是失败的 clang 命令的缩写版本:

error: linking with `/nix/store/9j864incgjx7kqggbpisdi3nmssy4qm5-clang-wrapper-5.0.2/bin/cc` failed: exit code: 1
  |
  = note: "/nix/store/9j864incgjx7kqggbpisdi3nmssy4qm5-clang-wrapper-5.0.2/bin/cc" "-m64" "-L" ... "/nix/store/rfp87664xzhl6zv7dx5c1hixasqfxkp4-rustc-1.24.0/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-ba331b20e371c580.rlib" "-framework" "CoreServices" "-framework" "CoreServices" "-l" "System" "-l" "resolv" "-l" "pthread" "-l" "c" "-l" "m"

我发现尝试的唯一一件事是将框架添加到我的 PATH 中,但要么这个答案是错误的,要么 PATH 环境变量无法一直通过货物到达我正在执行相关构建的位置。

  • Clang(LLVM) 使用框架编译
  • 如何在 clang 中指定框架? - 苹果社区

  • 铁锈:1.24.0

  • 货物:0.25.0
  • jsonwebtoken:0.4.0
  • Cargo-Watch:默认版本来自cargo install cargo-watch

我如何告诉 clang 在哪里寻找框架?它是否涉及到我的工作环境的改变,或者我是否需要考虑改变我想要安装的板条箱的构建过程?

更多信息

我发现了clang -Xlinker -v命令,输出非常有趣:

@(#)PROGRAM:ld  PROJECT:ld64-274.2
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS)
Library search paths:
    /nix/store/ql6xbmdplca4sjpk0pz647p7djzri03c-libc++-5.0.2/lib
    /nix/store/rfp87664xzhl6zv7dx5c1hixasqfxkp4-rustc-1.24.0/lib
    /nix/store/ql6xbmdplca4sjpk0pz647p7djzri03c-libc++-5.0.2/lib
    /nix/store/rfp87664xzhl6zv7dx5c1hixasqfxkp4-rustc-1.24.0/lib
    /nix/store/8ykfqv6jx9jvfhnc4cdygdzg0piy8253-Libsystem-osx-10.11.6/lib
    /nix/store/4papfih2r9xlsl9m7hlisparij8k9zaq-clang-5.0.2-lib/lib
Framework search paths:
    /nix/store/hc6d711vwlwnn9swmkdpi9nbswbqg6h0-CF-osx-10.10.5/Library/Frameworks
    /nix/store/hc6d711vwlwnn9swmkdpi9nbswbqg6h0-CF-osx-10.10.5/Library/Frameworks
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)

这似乎指出了我的 Nix shell 中缺少的东西,而不是操作系统,甚至不是clang itself.


显然 Nix 都提供了标准 Apple 框架的包and对环境进行足够的沙箱处理,以至于标准框架不可用。

我对该解决方案的发现大部分来自在 OS X 10.11 上使用正确的 SDK 和命令行工具然后从检查vim-plugins nix 派生.

第一步是实际安装我的项目所需的框架。他们都住在nixpkgs.darwin.apple_sdk.frameworks.

这样做可以使大部分链接正常工作,但是随后_CFURLResourceIsReachable在我的平台上是一个未定义的符号。我用更新解决了这个问题NIX_LDFLAGS变量(如 vim-plugins nix 推导中所建议的)。我的项目的最终结果是这样的shell.nix file:

let
    pkgs = import <stable> {};
    frameworks = pkgs.darwin.apple_sdk.frameworks;
in pkgs.stdenv.mkDerivation {
    name = "orizentic";

    buildInputs = [ pkgs.rustc
                    pkgs.cargo
                    frameworks.Security
                    frameworks.CoreFoundation
                    frameworks.CoreServices
                  ];

    shellHook = ''
        export PS1="[$name] \[$txtgrn\]\u@\h\[$txtwht\]:\[$bldpur\]\w \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty \[$bldylw\]\$aws_env\[$txtrst\]\$ "
        export NIX_LDFLAGS="-F${frameworks.CoreFoundation}/Library/Frameworks -framework CoreFoundation $NIX_LDFLAGS";
    '';
}

这给了我cargo-watch包(这取决于CoreServices and CoreFoundation)。它显然也解决了依赖性jsonwebtoken has on Security尽管我还没有设法验证这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 macOS 框架可在 Nix 环境中 clang? 的相关文章

随机推荐

  • javascript 如何创建引用

    您能否提出任何解决方法来使用闭包或任何其他技巧来实现对变量的引用 createReference function TODO how to implement var x 5 var refX createReference x could
  • 如何将 Bootstrap 4 导航栏中的品牌徽标设置到左边缘?

    我有一个徽标 如下所示
  • RabbitMQ 使用自定义标头来存储消息参数

    我是 RabbitMQ 的新手 我对文档有些迷失 目前 作为一个例子 我正在尝试构建一个侦听队列的小型邮件服务 但我有点卡在应该将服务的参数放在哪里 目的地 主题 我应该将它们放在消息中的某种编码格式 json 中 还是应该使用标头结构 如
  • 单击地图注释时显示另一个视图

    我有一张只有一个注释的地图 我创建了一个简单的类 我希望它在用户单击注释时显示 问题是 当我单击注释时什么也没有发生 这是我的代码 void reverseGeocoder MKReverseGeocoder geocoder didFin
  • python中的子句提取/长句分割

    我目前正在开展一个涉及句子向量的项目 来自 RoBERTa 预训练模型 当句子很长时 这些向量的质量较低 并且我的语料库包含许多带有子句的长句子 我一直在寻找子句提取 长句分割的方法 但令我惊讶的是 没有一个主要的 NLP 软件包 例如 s
  • 如何将 javascript 字符串分解为每五个单词换行一次?

    我有一个不寻常的请求 给定一个如下所示的字符串 var a This is a sentance that has many words I would like to split this to a few lines 我需要每五个单词插
  • 隐式 DataTemplate 不起作用

    为什么下面隐含DataTemplate不行 仅内嵌注释DataTemplate将工作 注意 如果我删除两者DataTemplates 我看到一个字符串表示形式ProductListView完整类型名称
  • 日志文件中写入什么内容?

    我的问题很简单 将什么写入日志 有什么约定吗 我必须放入什么 由于我的应用程序必须发布 我希望有友好的日志 大多数人都可以阅读这些日志 而无需询问它是什么 我已经有了一些想法 比如时间戳 每个函数 方法的唯一标识符等 我想要几个日志级别 例
  • Android USB鼠标右键单击正确行为(ICS)

    插入 android ics 的 USB 鼠标的右键单击是否始终指定为 后退 按钮 我有一台平板电脑 但没有 我想删除状态栏 并且仍然能够通过 USB 鼠标使用平板电脑 有谁知道在哪里 如何配置 android 中的行为 迟到的答案 但答案
  • C++ 重写异常::what()

    我有一个自定义异常 class RenterLimitException public std exception public const char what 重写what 的正确方法是什么 现在 我在头文件中创建了这个自定义 并希望覆盖
  • 实体框架多租户共享数据架构:单列、多个外键

    我有以下数据结构 property Notification abstract class BindableBase base class for all tenant scoped objects abstract class Tenan
  • C++ 性能,for 与 while

    一般来说 或根据您的经验 for 和 while 循环之间的性能是否存在差异 如果它们是双重 三重嵌套怎么办 矢量化 SSE 是否受 g 或 Intel 编译器中的循环变体影响 谢谢 Here是一篇关于这个主题的好论文
  • 使用可变参数模板显式模板实例化

    我有几个模板类Impl 使用一些抽象方法 部分在 CPP 文件中实现 因此我需要显式实例化我的模板以便链接器找到它 如下所示 template class Impl
  • 使用 GROUP BY 连接单列字段

    有没有什么方法可以通过对字段进行分组来组合 连接一列中的字段 例如 col1 col2 1 aa 1 bb 1 cc 2 dd 2 ee 我想查询类似的内容 select col1 concat col2 from tableName gr
  • django 模板中的变量减法

    是可以写的 myval add 5 myval add value 乃至 myval add 5 但是 我不知道应该输入什么来添加值 1 之类的 myval add value 可悲的是 这不起作用 您需要使用双引号 myval add 5
  • 合并 XML 文档 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要 合并 两个 XML 文档 覆盖重叠的属性和元素 例如 如果我有文件1
  • ConfigurationManager 不保存设置

    这是我正在使用的代码 private void SaveConfiguration if txtUsername Text txtPassword Text ConfigurationManager AppSettings Username
  • Netbeans - 安装 SASS

    我曾多次尝试在 netbeans 上安装 SASS 我已遵循以下教程 http kgagliardo com blog netbeans sass windows 7 创建并尝试保存 SASS 文件时出现以下错误 并且未创建 CSS 文件
  • 自定义 UIControl 和手势识别器

    我正在尝试创建一个类似于滑块的自定义 UIControl 该控件是一个视图的子视图 该视图还附加了一个点击手势识别器 现在的问题是这个点击手势识别器取消了发送到我的控件的触摸 有没有办法可以从我的控件的代码中覆盖它 如果我查看 iOS 中的
  • 如何使 macOS 框架可在 Nix 环境中 clang?

    我在 macOS 10 13 5 上学习 Rust 编程 并使用 Nix 来控制我的开发环境 一些行动 例如包括jsonwebtoken库或安装cargo watch模块 导致构建需要似乎未安装的 macOS 框架 我收到此错误消息 not