【问题标题】:Combine resources into single binary [duplicate]将资源组合成单个二进制文件[重复]
【发布时间】:2022-01-22 03:50:14
【问题描述】:

我有一个程序:

dist/
├── myapp
│   ├── bin
│   │   └── launcher
│   ├── lib
│   │   └── libmyapp.so
│   └── share
│       ├── data00.zip
│       └── data01.zip

我想要做的是将所有这些合并到一个可执行文件中,这样对于最终用户来说,它是一个可以复制的单个文件。

我也可以使用 bash shell 文件。另外,我可以控制 .so 文件。我可以将它静态链接到播放器。

如何将所有这些组合成一个/合并的可执行文件?

这是在 linux 上。 .zip 文件使用fopen() 打开。我希望能有某种魔法,比如 FUSE 或类似技术。

我希望避免将 .zip 作为 DATA 段有效负载嵌入或使用 .h 文件,因为这会以我不希望的方式改变我的程序。这更像是一个包装问题。

【问题讨论】:

  • 适用于哪个平台?
  • zip 文件是如何使用的?
  • zip 文件是使用 fopen 等 API 命令加载的,以在 /share 文件夹中查找 .zip。代码查找pwd,然后向上遍历share/ 以查找.zip 文件
  • 我遇到了这个makeself.io,它似乎解决了部分问题——可能已经解决了问题。它将二进制文件提取到临时文件夹中。更好的解决方案是不提取。
  • 您可以将您的 zip 文件转换为 C 标头并在您的代码中使用它;例如:xxd -i data00.zip > mydata00.h

标签: c linux bash packaging software-packaging


【解决方案1】:

您可以将文件压缩并共享为自解压存档,即 .exe 格式。

您可以为此使用 7-zip。 Use-7Zip-to-Create-Self-Extracting-excutables

【讨论】:

    【解决方案2】:

    这不是一个不寻常的需求或问题。有许多不同的方法可以做到这一点。

    当然,在 Windows 上,您应该使用带有 Windows 资源编译器的 Windows 资源。
    但您在 Linux 上:O)

    在 Linux 上,objcopy(1) 可以提供帮助。有一篇关于此的旧 Linux Journal 文章:

    真的没有比这更简单的了。

    顺便说一句,关于 SO 的很多问题都处理相同的事情,都使用相同答案的变体。例如:Is there any standard way of embedding resources into Linux executable image? [duplicate] 最佳答案使用汇编器来做与objcopy 相同的事情。变化比比皆是。

    编辑:找到正确的副本。将在上面标记。

    【讨论】:

    • 那为什么不把它标记为重复呢?
    • 因为副本很难做到,而不是使用 objcopy。
    • @Dúthomhas:所以为您选择的副本提供更好的答案。
    • 因为这个问题是一个帖子的蜘蛛网。 :-( 但我想我找到了投票正确答案最高的副本:Is there a Linux equivalent of Windows' "resource files"?
    • 你说服自己这是一个骗局并结束了我的问题。这不是 Windows 问题。 windows 资源文件也不大致类似。 .zip 文件使用 fopen 打开,而资源文件使用特殊的 Windows API 打开。我希望有一些魔力——比如 Fuse 包装器或容器技术,可以隐藏内部文件系统而不更改 C 代码。
    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 2020-06-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多