【问题标题】:Can text documents and other files get packaged into C executable文本文档和其他文件可以打包成 C 可执行文件吗
【发布时间】:2010-10-11 01:22:14
【问题描述】:

我的 C 应用程序依赖于一些文件来复制。这些文件是否包含在可执行文件中而不是作为独立文件?是否必须静态链接?如果重要的话,我正在使用 Eclipse CDT。

【问题讨论】:

  • 这个问题我不清楚。将 [zipping][1] exe 和文件放在一起并分发 zip 文件是一种选择吗? [1]:en.wikipedia.org/wiki/ZIP_%28file_format%29
  • 没有。我的意思是文本文件只能在可执行文件中访问。它们包含在可执行文件中,而不是文件系统中。
  • 我明白了。然后,首先想到的选项是创建一个[static] const char * file_contents = ... 来保存该文本。

标签: c executable static-linking


【解决方案1】:

您可以通过多种方式将文件数据链接到可执行文件中。像 Windows 这样的平台允许您将数据作为“资源”链接到可执行文件中,并提供 API 来访问这些资源(这就是图标和其他对象绑定到 Windows 可执行文件的方式)。如果您的平台支持,这可能是最好的方法 - IDE 中内置了对它的支持。

在较低级别,您也许可以使用链接器将文件作为可寻址对象直接链接到可执行文件中:

最后,如果您正在处理更原始的系统,例如某些嵌入式平台,您可以通过将文件转换为 C 字节数组的源代码来运行文件:

【讨论】:

    【解决方案2】:

    除非您做一些特别的事情,否则这些文件不会包含在您的可执行文件中。您是否有理由无法将文本文件与您的应用程序一起分发?

    如果要将文件烘焙到可执行文件中,可以将它们烘焙到常量字符串中:

    const char myTextFileData[] = "the text of the file goes here";
    

    当然,您必须将文本文件预处理为 C 源文件(请记住正确转义引号、反斜杠、换行符和其他控制字符)。或者,您可以使用objcopy 等工具将文件数据直接转换为目标文件,然后将该目标文件链接到您的可执行文件中。

    【讨论】:

      【解决方案3】:

      没有。可执行文件仅包含编译器和链接器的输出。您的程序需要的任何辅助文件都必须单独打包。

      【讨论】:

        猜你喜欢
        • 2022-09-28
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2011-04-23
        • 2015-06-29
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        相关资源
        最近更新 更多