当前位置: 首页 > 面试题库 >

带有GCC的C / C ++:将资源文件静态添加到可执行文件/库

曹智
2023-03-14
问题内容

有人知道如何使用GCC将任何资源文件静态地直接编译到可执行文件或共享库文件中吗?

例如,我想要添加永不更改的图像文件(如果更改,则无论如何我都必须替换该文件),并且不希望它们位于文件系统中。

如果这是可能的(我认为是因为Windows的Visual C
++也可以这样做),如何加载存储在自己的二进制文件中的文件?可执行文件会自行解析,查找文件并从中提取数据吗?

也许我还没有看到GCC的选择。使用搜索引擎并没有真正吐出合适的东西。

我需要此功能才能用于共享库和普通的ELF可执行文件。

任何帮助表示赞赏


问题答案:

使用imagemagick:

convert file.png data.h

给出类似的内容:

/*
  data.h (PNM).
*/
static unsigned char
  MagickImage[] =
  {
    0x50, 0x36, 0x0A, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 
    0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4D, 0x50, 0x0A, 0x32, 0x37, 
    0x37, 0x20, 0x31, 0x36, 0x32, 0x0A, 0x32, 0x35, 0x35, 0x0A, 0xFF, 0xFF, 
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

....

为了与其他代码兼容,您可以使用fmemopen“常规” FILE *对象,也std::stringstream可以使用iostreamstd::stringstream但这并不是很好,您当然可以在可以使用迭代器的任何地方使用指针。

如果您将此参数与automake一起使用,请不要忘记适当地设置BUILT_SOURCES。

这样做的好处是:

  1. 您得到了文本,因此可以在版本控制中进行合理的修补
  2. 它是便携式的,并且在每个平台上都有明确的定义


 类似资料:
  • 动态的 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件。理想情况下你的 服务器已经配置好了为你的提供静态文件的服务。在开发过程中, Blade 也能做好这个工作。我们在 resources 目录下创建一个名为 static 的文件夹存储静态资源文件,静态文件位于 应用的 /static 中。 Blade 默认设置了 static、assets、webjars、uploa

  • 问题内容: 我使用的是Visual Studio2005。我创建一个项目,而不是Web Project,仅创建Windows应用程序。 我记得可以将Access数据库文件添加到项目中。我不需要连接到服务器,可以检索数据。而且我想对SQL数据库文件做同样的事情。 我做了以下步骤: 右键单击项目。 选择添加现有项目 浏览* .mdf文件。 出现“数据源配置向导”,并显示此消息 从数据库检索信息时发生错

  • 本文向大家介绍可读可执行的C语言简历源文件,包括了可读可执行的C语言简历源文件的使用技巧和注意事项,需要的朋友参考一下 这里黑客新闻吗?作者用代码更新了自己的简历,是不是很接地气,特符合程序员的逼格。这是一份可读可执行的C语言源文件,也是作者编码风格的体现。 C语言天才写的一份简历 网友 Wossoneri 编译后,我们看到的简历 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支

  • 我正在使用 karaf 4.0.5 和 osgi 进行一个项目。我们有客户端代码来调用 REST API,这需要加载 3 个“*.属性”文件。我得到了一个客户端jar,我用它来调用服务器端类和方法(包含我无法更新的代码)。所需的属性文件存在于提供的客户端 jar 中,但其代码仍无法找到并加载它们。 在调试我的pax考试时,我发现它没有从jar加载资源文件的可能原因如下。 用于加载文件的代码似乎仅尝

  • 问题内容: 我正在尝试自动将新对象添加到现有json文件中。我在网上四处张望,却发现添加了数据和东西,但没有发现整个对象。这就是我要编辑的文件的外观: 我想去 谢谢您的所有答复,但我认为所有人都无法完全理解我的意思。我已经尝试了一些答案,但是后来我明白了: 我想在[]之间保持平衡。 问题答案: 如果使用json.NET,则可以简单地反序列化和序列化json。

  • 本文向大家介绍请你说一下C++源码到可执行文件的过程?相关面试题,主要包含被问及请你说一下C++源码到可执行文件的过程?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)预编译 主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下 1、删除所有的#define,展开所有的宏定义。 2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#