使用 Rust 构建的 DLL 在运行时是否需要 libgcc.dll?

2024-05-22

如果我构建一个 DLLRust 语言 http://rust-lang.org/, 是否需要libgcc*.dll在运行时出现?

一方面:

  • 我在互联网上的某个地方看到过一个帖子,声称是的;
  • rustc.exe has libgcc_s_dw2-1.dll在其目录中,并且cargo.exe从以下位置下载时,如果没有 dll,则无法运行http://crates.io http://crates.io网站;

另一方面:

  • 我看过有关用 Rust 构建玩具操作系统内核的文章,因此它们肯定不需要 libgcc 动态库。

所以,我很困惑。确定的答案是什么?


Rust 为 Windows 提供了两个主要工具链:x86_64-pc-windows-gnu and x86_64-pc-windows-msvc.

The -gnu工具链包括一个msys环境并使用 GCCld.exe链接目标文件。该工具链需要libgcc*.dll在运行时出现。该工具链的主要优点是它允许您链接到其他工具链msys提供的库可以更容易地链接到某些在正常 Windows 环境下难以链接的 C\C++ 库。

The -msvc工具链使用标准的、本机 Windows 开发工具(Windows SDK安装或Visual Studio安装)。该工具链不使用libgcc*.dll在编译或运行时。由于此工具链使用普通的 Windows 链接器,因此您可以自由链接任何普通的 Windows 本机库。

如果您需要面向 32 位 Windows,i686-这两个工具链的变体均可用。


NOTE:以下答案总结了截至目前的情况Sep'2014;我不知道它是否仍然是当前的,或者从那时起情况是否变得更好或更糟。但我强烈怀疑事情have改变了,因为从那时起已经过去了两年。如果有人尝试再次询问 steve klabnik,然后更新以下信息,或者写一个新的、更新的答案,那就太酷了!


与 steveklabnik 进行 Rust IRC 聊天的快速原始记录,他给了我一个答案:

你好;我有一个问题:如果我使用 Rust 构建 DLL,它是否需要 libgcc*.dll 在运行时存在? (在 Windows 上)

I believe如果您使用标准库,那么它确实需要它; 我们依赖的 IIRCone来自它的符号; 但我不确定。

我怎样才能避免使用标准库或它的那些部分? (和/或您确切知道哪个符号吗?)

它涉及到你的板条箱根目录中的#[no_std];我认为不安全的指南 http://doc.rust-lang.org/guide-unsafe.html#avoiding-the-standard-library有更多。

Running nm -D | grep gcc给我看__gc_personality_v0,然后就是这个:__gxx_personality_v0 是做什么用的? https://stackoverflow.com/q/329059/98528, 所以看起来我们的堆栈展开实现取决于此。

我似乎记得我也看过一些关于分割标准库的 RFC;有哪些部分我可以在不拉入 libgcc 的情况下使用?

Yes, libcore不需要任何这些。 你放弃libstd.

另外,引用部分内容不安全的指南 http://doc.rust-lang.org/guide-unsafe.html#using-libcore:

核心库 (libcore) 的依赖项很少,并且比标准库 (libstd) 本身更易于移植。此外,核心库具有编写惯用且有效的 Rust 代码所需的大部分功能。 (...) 其他库(例如 liballoc)向 libcore 添加了功能,这些功能做出了其他特定于平台的假设,但仍然比标准库本身更具可移植性。

以及当前的片段展开模块的文档 http://doc.rust-lang.org/std/rt/unwind/:

目前 Rust 使用 libgcc 提供的 unwind 运行时。

(The transcript was edited slightly for readability. Still, I'll happily delete this answer if anyone provides something better formatted and more thorough!)

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

使用 Rust 构建的 DLL 在运行时是否需要 libgcc.dll? 的相关文章

  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • 取消后调用 boost::asio 异步处理程序没有错误

    我的代码在单个线程中使用 boost asio 和 io service 来执行各种套接字操作 所有操作都是异步的 每个处理程序都依赖于boost system error code 特别boost asio error operation
  • 使用 if 表达式时,“不匹配的类型:预期的 `()`” 是什么意思?

    我尝试在 Rust 中实现 fizzbuzz 但因一些神秘错误而失败 fn main let mut i 1 while i lt 100 println if i 3 0 Fizz if i 5 0 Buzz if i 3 0 i 5 0
  • 如何使用命令行压缩文件?

    我想使用批处理文件命令 Windows XP 批处理文件 压缩目录 例如 如果我想解压缩一个文件意味着我可以使用jar xf file zip java bat 文件命令 就像我想要一个命令行批处理来压缩目录一样 如果您使用的是 Ubunt
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 将 CrashDumps 转储到应用程序运行所在的同一文件夹中

    我编写了一个应用程序 我希望对其进行一定程度的自动调试 我想使用 Windows 错误报告将故障转储输出到应用程序运行所在的同一文件夹中 我的想法是 我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件 然后根据需要上传它们进行分析
  • Rust 中声明变量的宏?

    在 C 中 可以编写声明变量的宏 如下所示 define VARS a b c int a b c 当然 这不是您通常想要做的事情 在实际的例子中 我希望开始工作 但它并不那么简单 define VARS data stride a b c
  • 在哪里可以找到 Windows 7 UX 指南中推荐的图标/动画?

    Windows 7 UX 指南有很好的插图和图标示例 但我在 SDK 中确实找不到它们 他们藏在某个地方 还是找不到 如果您谈论的是常见的 UI 图标 那么您应该以编程方式获取它们 例如 您可以使用 var errIcon HICON be
  • 卸载以前的版本安装新版本的安装项目

    我创建了一个安装项目并安装在Windows系统中 在安装安装项目之前 我将其设置为 DetectNewInstallerVersion true and RemovePreviousVersion True 我也每次都换版本 但是 如果我重
  • Tensorflow 导入错误:没有名为“tensorflow”的模块

    我在 Windows Python 3 5 Anaconda 环境中安装了 TensorFlow 验证成功 有警告 tensorflow C gt python Python 3 5 3 英特尔公司 默认 2017 年 4 月 27 日 1
  • 在 Win7 登录屏幕上运行应用程序[重复]

    这个问题在这里已经有答案了 我想通过服务在 Windows 7 的登录屏幕上运行应用程序 我对此进行了长期研究并尝试了不同的方法 但不幸的是到目前为止还没有完全成功 我设法在当前登录用户的锁定屏幕上运行该应用程序 起初我认为这就是我基本上试
  • 用于创建计划任务的 VBScript

    我正在尝试创建一个 VBScript 它创建一个批处理文件 然后创建一个计划任务来运行该批处理文件 到目前为止 我尝试过的所有操作都创建了批处理文件 但没有创建计划任务 并且我没有收到任何错误 这是我到目前为止所拥有的 Option Exp
  • 如何在自托管 WCF 中获取多部分表单数据?

    我已经搜索了很长一段时间 但没有找到我要找的东西 我在 Windows 应用程序中自行托管了一个 http WCF 现在 在我的服务方法之一中 我需要接收一个文件和一些表单数据字段 在类似的问题中 情况要么发送一个文件 这是通过流数据然后转
  • 将 kinit 与 keytab 文件一起使用时会发生什么

    希望对kinit和keytab文件的使用有更多的了解 例如 如果我已经为某个服务生成了一个密钥表文件 该服务通过以下方式注册到活动目录 ktpass mapuser to someuseraccount ktab k mykeytab a
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • 我可以避免使用泛型来避免急于解决特征实现的歧义吗?

    考虑以下 Rust 代码 use std collections HashMap use std hash Hash trait Foo
  • 为什么 Windows 命令 DIR 在搜索 *.tif 文件时也会输出 *.tiff 文件?

    我想使用 Windows 命令DIR为了找到唯一TIF文件 即具有扩展名的文件 tif 因此我使用以下小批处理文件 for f delims a IN dir b a d s C wolter testversion input tif d

随机推荐

  • 使用他们的 API 创建一个基本的 MailChimp 注册表单

    我是 MailChimp 的新手 需要一些帮助 通过他们的基本时事通讯注册表单 您只需将一些预先打包的 HTML 嵌入到您的页面中即可 然而 这样做的问题是 单击 提交 会重定向到 MailChimp 页面 我不想重定向到 MailChim
  • Android 上 WebRTC 的自定义视频源

    Overview 我想使用自定义视频源通过 WebRTC Android 实现来直播视频 如果我理解正确的话 现有的实现仅支持 Android 手机上的前置和后置摄像头 以下类与此场景相关 Camera1Enumerator java ht
  • 从字符串中提取电子邮件地址

    我有一个像这样的字符串 Francesco Renga lt email protected cdn cgi l email protection gt 我只需要提取电子邮件 即 电子邮件受保护 cdn cgi l email protec
  • 防止更新 ASP.NET MVC 和实体框架中未更改的值

    我正在使用 ASP NET MVC 和实体框架 我有一个 编辑人员 网页 可以在其中编辑人员的字段 然后在回发操作中 我使用以下代码 var person objectCtx Persons Where s gt s Id id First
  • “结构类型防护”与“if”配合使用,但不能用作数组过滤谓词

    我有一个联合类型 Pet在下面的示例中 组合了多个对象类型 每个对象类型都有一个type指示其类型的属性 有时我有一个联合类型的数组 Pet 并且需要 filter 它基于type财产 这本身工作得很好 但为了避免多余的类型声明 我想确保
  • 基于两列对数据框中的行进行求和[重复]

    这个问题在这里已经有答案了 我想添加一列的值 将它们按两列分组 我找到了如何在一列上执行此操作 但无法弄清楚如何在两列上执行此操作 例如 如果我有以下数据框 x c a a b b c c a a b b c c a a b b c c y
  • Spring Batch - 对数据列表中的每个项目重复步骤

    这是一项艰巨的任务 但我确信这并非闻所未闻 我有两个数据集 国家和人口统计数据 国家 地区数据集包含国家 地区名称及其人口统计数据的 ID 人口统计数据集是从乡村到郊区的分层数据集 这两个数据集都是每周从第三方获取的 我需要将人口统计数据分
  • 使用 Retrofit 2 添加标头以请求

    我正在尝试发送带有身份验证标头的请求 但服务器似乎无法识别客户端 我用了this https futurestud io tutorials android basic authentication with retrofit教程 并实现了
  • [重复]

    这个问题在这里已经有答案了 有什么区别List
  • Git 认为我每次进行小更改时都在重写我的一个文件

    我有一个中等大小的 Java 文件 每次我对一个文件 BuildTable java 进行更改时 Git 都会将其报告为巨大的更改 即使只是一两行 BuildTable java 大约有 200 行 本次提交中的更改仅更改了一行 git d
  • Flask-admin 内联建模传递表单参数会抛出 AttributeError

    Flask 开发者们大家好 在 Flask admin 中 我目前尝试在模型视图中实现内联模型编辑 在模型方面 我有一个简单的树结构 表示一组内容页面 每个节点都有多个子节点以及与其关联的多个内容数据模型 模型被命名为ContentNode
  • Android Facebook SDK 和 URL 方法成功形成好友对话框,但无法提交

    我开始认为这是一个错误 请证明我错了 我想以编程方式在 Facebook 上加好友 他们是唯一且肯定是该人在现实生活中认识的人 以下三种解决方案都具有相同的结果 成功的好友对话框 意味着个人资料名称 图片 指示操作的语句 与某人成为好友 以
  • Struts ActionForm 属性应该是什么类型?

    我使用 Struts 1 2 4 继承了这个巨大的遗留 Java Web 应用程序 我有一个关于 ActionForms 的具体问题 其中一些仅具有字符串属性 即使对于数字 其中一些使用看似合适的类型 整数 日期 字符串等 这里的最佳实践是
  • 使用 Docker 时未加载 Keycloak SPI 提供程序和层

    我正在尝试使用一些自定义内容 例如 logback 扩展 设置 docker 映像 因此我有一些 CLI 脚本 如下所示 subsystem logging remove extension org jboss as logging rem
  • 可扩展的宏定义

    灵感来自于评论区 https stackoverflow com questions 23879410 is it possible to extend a function lambda macro in scheme 23879575
  • JMS 规范或各种实现是否支持消息的传递确认?

    假设 Producer 向 JMS 主题 news 发送一条消息 Consumer1 读取了消息 但 Consumer2 离线 因此尚未读取消息 是否有任何内置 规范或实现 方式让生产者收到消费者 1 已读取其消息但消费者 2 尚未读取的通
  • 使用 PyQt 和 matplotlib 在可滚动小部件中显示多个绘图

    由于我没有得到答案this https stackoverflow com questions 12179893 creating a scrollable multiplot with pythons pylab我尝试用 PyQt 解决这
  • 如何高效生成总和在指定范围内的所有组合(在所有深度)

    假设您有一组值 1 1 1 12 12 16 如何生成总和在预定义范围内的所有可能组合 不重复 min max 例如 这里是 所有深度的 范围在13 and 17 1 12 1 1 12 1 1 1 12 16 1 16 这假设具有相同值的
  • Jupyter Notebook 找不到 IQSharp

    我一直在尝试为 Quantum Katas 运行 Q 但在找到 Q 内核方面遇到了一些困难 唯一显示的内核是用于 Jupyter Notebook 的 Python 3 内核 奇怪的是 当我执行 jupyter kernalspec lis
  • 使用 Rust 构建的 DLL 在运行时是否需要 libgcc.dll?

    如果我构建一个 DLLRust 语言 http rust lang org 是否需要libgcc dll在运行时出现 一方面 我在互联网上的某个地方看到过一个帖子 声称是的 rustc exe has libgcc s dw2 1 dll在