将多个程序编译为单个二进制文件以节省空间

时间:2015-02-07 03:58:23

标签: c compilation executable embedded-linux

busyboxdropbear等应用程序在一个二进制文件中包含多个程序。

那里有工具可以促进这个过程吗?我可以将不同作者的几个C程序编译成单个二进制文件相对容易吗?

我问,因为我正在为一个小型Linux嵌入式设备编写一些东西,并且我试图节省尽可能多的空间。

2 个答案:

答案 0 :(得分:3)

不,这不是一种数据压缩形式。您通常不能使用两个类似的应用程序并利用它们的功能相似性来节省磁盘空间。

这些应用程序执行的操作是检查第一个命令行参数argv[0]的值,该参数说明如何调用二进制文件。然后程序就做对了。

如果您可以访问一些应用程序的源代码,并且您知道它们正在重复完全相同的代码(即,它们正在合并来自同一静态库的函数),那么您有几个选择:

  • 将重复的代码(静态库)移动到共享库中。
  • 尝试通过编写自己的main函数并同时编译它们来实现您提出的策略。

如果没有看到相关程序的构建系统,很难知道会有多少工作,但它可能相当容易。&# 34;

如果没有任何常见的静态库,但他们只是在做类似的事情,那么你就是在谈论重构它们。这很容易变成所有程序的完全重写。值得一提的是,如果结果将超过其各个部分的总和,并且它可能比从头开始更容易,但我们可以说明了很多工作。"

答案 1 :(得分:2)

我不知道有任何通用工具可以做到这一点,并且在任何情况下,当要组合的程序的代码之间存在大量重叠时,它只是节省空间的措施。对于busybox而言,单个applet的代码之间的节省不是很多,而是共享静态链接libc的单个副本。对于动态链接,大部分好处都会消失。