使用 GCC 构建最小的独立可执行文件

2024-02-24

我有几个程序(用 C 编写)实现一些算法,我用它们来测量计算时间。整个数据直接在代码中实现为静态库,这些程序没有输入和输出。也没有 C 库调用(没有 printfs 等)。

我想构建完全独立且最小的可执行文件。我不想将我的程序与 libgcc(目标 CPU 有协处理器,因此我不需要模拟浮点运算)、C 库或任何其他库链接。实际上我想让我的程序尽可能独立。在Linux上,ELF程序必须仅与crt0.o链接才能正常运行,对吧?

我问这个问题主要是因为我很好奇;)


链接至gcc -nostdlib,然后使用objdump -h and strip --remove-section=...通过去掉注释部分和异常处理框架信息部分等愚蠢的东西来真正缩小它。继续删除部分,直到它停止工作。

并编译-Os当然

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

使用 GCC 构建最小的独立可执行文件 的相关文章

  • 字符串初始化的 gcc 诊断不一致

    我正在使用 gcc 4 9 1 Mingw 并使用以下命令编译代码 gcc test c otest exe std c11 迂腐错误 Wall Wextra 此代码给出诊断 int main void char a 5 h e l l o
  • 2017 年在 OS X 上从源代码构建 Apache Hadoop

    到目前为止 我已经分叉了 Git 存储库 https github com apache hadoop 我一直在寻找有关如何从源代码构建的信息 我尝试过以下命令 mvn package Pdist Dtar DskipTests 这导致了以
  • 为什么这个 C++ 包装类没有被内联掉?

    EDIT 我的构建系统出了问题 我还在弄清楚到底是什么 但是gcc产生了奇怪的结果 尽管它是 cpp文件 但是一旦我使用了g 然后它按预期工作 对于我一直遇到麻烦的事情来说 这是一个非常精简的测试用例 其中使用数字包装类 我认为会内联 使我
  • Linux 上的 头文件在哪里?为什么我找不到 ? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在Linux中实现C的getch 函数 https stackoverflow com questions 3276546 how to implement getch function of c
  • 类和结构在填充和继承方面的区别

    以下所有操作都将在 GCC 9 1 上使用编译器资源管理器 https github com mattgodbolt compiler explorer 在 x86 64 中 使用 O3 我有这个代码 struct Base Base do
  • limit 关键字在 gcc/g++ 中是否提供了显着的好处?

    有没有人见过关于是否使用 C C 的任何数字 分析restrictgcc g 中的关键字实际上在现实中 而不仅仅是理论上 提供了任何显着的性能提升 我读过各种推荐 贬低其使用的文章 但我还没有遇到任何实际数字可以证明双方的论点 EDIT 我
  • C 程序的“编译器正确”命令

    这是关于中提到的编译步骤Linux 期刊文章 https www linuxjournal com article 6463 C 程序是使用编译的cpp cc1 as and ld该文章中的命令 我能够执行这些步骤cpp as and ld
  • 为什么Delphi打开时间越长编译速度就越慢,我该怎么办?

    我的公司十多年来一直在德尔福上运行一个大型项目 我们的代码库多年来一直在增长 目前代码数量约为 400 万行 编译速度正在成为一个问题 我们花了时间清除单元循环引用 编译缓慢的已知原因 并检查了设置的各个方面 已经到了我们无法通过我们所能控
  • GCC 4.7 字符串文字的源字符编码和执行字符编码?

    Linux x86 64 上的 GCC 4 7 是否具有默认字符编码 用于验证和解码 C 源文件中字符串文字的内容 这是可配置的吗 此外 当将字符串数据从字符串文字链接到输出的数据部分时 它是否具有默认的执行字符编码 这是可配置的吗 在任何
  • lambda 始终返回“1”

    有这样的代码 include
  • 利用 SSE 和其他 CPU 扩展

    在我的代码库中有几个地方 对于大型数据集 相同的操作会重复很多次 在某些情况下 处理这些需要花费相当长的时间 我相信使用SSE来实现这些循环应该可以显着提高它们的性能 特别是在对同一组数据执行许多操作的情况下 因此一旦数据最初被读入缓存 就
  • 为什么 GCC 不将 a*a*a*a*a*a 优化为 (a*a*a)*(a*a*a)?

    我正在对科学应用程序进行一些数值优化 我注意到的一件事是 GCC 会优化调用pow a 2 通过将其编译成a a 但是调用pow a 6 没有优化 实际会调用库函数pow 这大大降低了性能 相比之下 英特尔 C 编译器 http en wi
  • 在 Ubuntu 上用 C 项目编译和链接 GTK 3

    我相信这不是重复的问题 在发布此问题之前我已经看过所有问题 答案 我想我这里的情况有所不同 我使用Ubuntu 12 04并下载GTK 2 和 3 我从 GNOME 网站复制了一个简单的 GTK 源代码 但是当我在终端中使用这个命令时 gc
  • C 和 C++ 编译器何时将浮点型隐式转换或提升为双精度型?

    对于嵌入式项目 我想知道符合标准的 C 编译器 C99 和 C 编译器 C 11 何时最有可能隐式将单浮点变量 值提升为双浮点 我知道有两种情况 不带后缀的文字f 例如 3 14 将浮点数传递给带有可变参数列表的函数 还有其他人吗 那么模板
  • GCC 和 -Wconversion

    让我们编译以下程序 int main uint16 t data 0 data uint16 t std round 3 14f return 0 with g Wconversion prog cpp 我们会得到warning conve
  • 如何让 xcodebuild 将编译错误和警告打印到 stderr?

    似乎 xcodebuild 将所有内容打印到标准输出 Applications Xcode app Contents Developer usr bin xcodebuild project test xcodeproj build tar
  • 在 Linux 上将 libquadmath 与 C++ 链接

    我有一个示例代码 include
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • 编译时在代码中替换Java静态最终值?

    在java中 假设我有以下内容 fileA java class A public static final int SIZE 100 然后在另一个文件中我使用这个值 fileB java import A class b Object t

随机推荐

  • 如何使用 sendmessage 发送 win32 中具有计时器过程的 wm_timer

    我有一个计时器 ID 1 它有一个timerproc作为回调函数 我正在 timeproc 中制作其他计时器 ID 2 3 它们使用WM TIMER事件 而不是另一个计时器进程 创建窗口时 我想立即生成定时器事件 ID 1 所以我像这样使用
  • wxWidgets - 事件表与 Connect()?

    我刚刚开始使用 C 学习 wxWidgets 3 0 版 我已经注意到 wxWidgets 中的事件处理是由事件表完成的 但一篇教程也提到了 Connect 实际上它只是说 本教程将使用事件表 而不是 Connect 我想知道事件表和 Co
  • 在标点符号前动态添加 标签

    我正在尝试弄清楚如何添加
  • WPEngine 备份中 WordPress 项目中的 PHP 解析错误

    我继承了一个 Wordpress 项目 并且正在尝试对其进行设置 我对 WordPress 的经验为零 也可以说我对 PHP 的经验为零 到目前为止 我已经成功在本地计算机上设置了环境 但我遇到了 PHP 解析错误 无法通过谷歌搜索找到解决
  • 为什么我的 RxJS 倒计时时钟不显示?

    我正在开发一个 Angular 9 测验应用程序 我正在使用 RxJS 作为倒计时器 在container scoreboard time time component ts 中 并且计时器似乎没有显示 stopTimer 函数应在计时器停
  • Visual Studio 团队服务与 GitHub

    我正在寻找为我的内部 闭源 项目设置 CI 工作流程 我目前正在使用 GitHub 进行 git 问题跟踪 我的应用程序是桌面应用程序 没有云 服务器部署 因此工作流程应该是 在 github 上提交 master 通过以下方式通知 CIg
  • NullInjectorError:没有 InjectionToken DocumentToken 的提供者

    我正在为所有 Angular 5 项目设置一个通用库 库是 GitHub 存储库的克隆角度库入门套件 https github com zurfyx angular library starter kit 一切正常 直到我尝试使用HttpC
  • 使用配置文件启动redis-server

    我的配置文件位于 root config redis rb 我这样启动redis redis server 如何启动 redis 以便它使用我的配置文件 另外 我讨厌乱搞ps grep尝试找到一个 pid 来关闭它 如何通过 cd 进入根目
  • ReplaceWith 自动关闭标签

    我有 3 个 div 我想用另一个 div 的开始标签替换第一个 div 用结束标签替换第三个 div 这就是我的意思 div 1 div div 2 div div 3 div 当我尝试替换 使用replaceWith 第一个div时 d
  • YouTube 数据 API v3 允许浏览器应用密钥的引荐来源网址未按预期工作

    我正在努力尝试正确配置新的 YouTube Data API v3 我需要从 Google Chrome 扩展程序访问 API 我已经创建了一个 API 密钥Google API 控制台 https code google com apis
  • 提交按钮正在下载 php 而不是运行它

    我正在尝试为我的网站制作联系表单 但是当我按提交时 会下载 php 文件而不是运行 我正在使用 chrome 但我认为这并不重要 我认为存在语法错误 但我已经搞乱了删除 添加等内容 即使没有语法错误 它仍然会下载文件而不是运行它 而且 是的
  • 如果输入值为空,则使用 Javascript 指定值“空”

    所以我有一个输入字段 如果它是空白的 我希望它的值是 空 一词 但是如果输入了任何值 我希望该值是输入的值 我想为此使用 javascript 知道如何做到这一点吗 UPDATE 抱歉 我认为我解释得不太好 我的意思不是占位符文本 我的意思
  • Airflow Worker 没有监听默认的 RabbitMQ 队列

    我已经使用rabbitmq代理配置了Airflow 服务 airflow worker airflow scheduler airflow webserver 正在运行 没有任何错误 调度程序正在推动任务执行default兔子MQ队列 即使
  • JAVA Android APK发布模式错误无法下载kotlin-compiler.jar

    当我在发布模式下构建新的 APK 或生成签名的 APK 时 出现以下错误 无法下载 kotlin compiler jar com android tools external com intellij kotlin compiler 26
  • C# 中的开源 C 编译器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Qt中何时使用paintEvent和paintGL?

    我在用QOpenGL控件 https doc qt io qt 5 qopenglwidget html并且不明白我应该把绘图代码放在哪里 在覆盖的内部paintGL https doc qt io qt 5 qopenglwidget h
  • dict 子类中的自定义迭代行为

    我有一个类是标准字典的子类 class Result dict Dict like object with special methods def content self return self getitem content def a
  • SwiftUI navigationBarBackButtonHidden 未按预期工作

    我有一个问题navigationBarBackButtonHidden修饰符 它不会隐藏导航后退按钮 这是列表的源代码 import SwiftUI struct ContentView View State var showSheet f
  • 在 Django 上调试神秘的“错误:无法导入名称

    有时当我跑步时manage py我收到一条红色的神秘消息 上面写着Error cannot import name
  • 使用 GCC 构建最小的独立可执行文件

    我有几个程序 用 C 编写 实现一些算法 我用它们来测量计算时间 整个数据直接在代码中实现为静态库 这些程序没有输入和输出 也没有 C 库调用 没有 printfs 等 我想构建完全独立且最小的可执行文件 我不想将我的程序与 libgcc