AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79340670
Accepted
JimMosher
JimMosher
Asked: 2025-01-09 04:25:28 +0800 CST2025-01-09 04:25:28 +0800 CST 2025-01-09 04:25:28 +0800 CST

运行 Rust 应用程序而不显示终端 - 适用于 MacOS

  • 772

我的情况和这篇文章的一样……

https://users.rust-lang.org/t/running-rust-app-without-showing-the-terminal/41859

... 上面链接中的发帖者可以在 Windows 中运行 Rust 二进制文件,但随着二进制文件的打开,终端窗口也会打开。在那篇文章中,有人提到了一种解决方法,确实有帮助。

在我的 Mac M1 上,我使用以下方法编译 Rust 二进制文件...

cargo build --target aarch64-apple-darwin --release

...二进制 GUI 打开得很好,但终端也显示了出来。

如何防止终端打开?

macos
  • 1 1 个回答
  • 59 Views

1 个回答

  • Voted
  1. Best Answer
    Kevin Reid
    2025-01-09T09:16:33+08:002025-01-09T09:16:33+08:00

    在 macOS 上,如果您打开一个裸可执行文件,则它被认为是一个命令行程序,应该有一个终端。要制作一个没有终端的正确 GUI 应用程序,您需要创建一个.app包。

    最小可行结构.app实际上非常简单,不需要任何特殊工具来创建。创建此目录结构:

    Your Application Name.app/
        Contents/
            Info.plist
            MacOS/
                your-executable-goes-here
    

    出于开发目的,可执行文件可以是指向 Rusttarget/目录中可执行文件的符号链接或 shell 脚本(但您分发的应用程序应该是自包含的)。

    在该Info.plist文件中,你应该输入:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>CFBundleExecutable</key>
      <string>your-executable-goes-here</string>
      <key>CFBundleIdentifier</key>
      <string>com.example.your-app-name</string>
    </dict>
    </plist>
    

    plist<dict>由键值对组成,因此这里的字典中有两个条目;如果假设它们是用 JSON 编写的(你实际上不能这样做),它们看起来会像这样:

    {
        "CFBundleExecutable": "your-executable-goes-here",
        "CFBundleIdentifier": "com.example.your-app-name",
    }
    

    <string>(替换上例中的“your-executable-goes-here”)的值必须CFBundleExecutable是您放入的可执行文件的文件名Contents/MacOS/。

    <string>的值(CFBundleIdentifier替换上例中的“com.example.your-app-name”)应为您的应用程序以反向 DNS 名称形式的唯一标识符 — 也就是说,如果您拥有域名example.com,则可以使用以 开头的标识符com.example.。 重要的是CFBundleIdentifier是唯一的(同一应用程序的不同版本除外)。

    如果您希望应用程序有一个图标,或者能够用来打开文档,那么您需要在Info.plist文件中放入更多内容。(在 macOS 上,打开的文档不是作为命令行参数传递的,而是作为传递到事件循环的事件传递的。)

    • 2

相关问题

  • 返回该月第一天的日期

  • 为什么 VS Code 让我在 macOS 上使用“option + 单击”打开编辑器链接,而不是“cmd + 单击”?

  • Visual Studio Code 正在等待和弦的第二个键。(Ctrl + G)

  • AppKit 在单独的线程中读取键盘输入

  • MAC 和 ZSH - 导出不“粘连”[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve