在C中独立应用,一个好主意?

时间:2011-01-15 11:54:20

标签: c linux

该术语根据维基百科有几个定义,但我真正感兴趣的是创建一个程序,其中包含源文件夹中包含的所有必需依赖项,因此最终用户不需要为其安装额外的库。应用程序安装。例如,Mac应用程序如何在程序本身中具有所有依赖关系......

或是否有autotools执行此操作的功能?我正在Linux环境中编程......

4 个答案:

答案 0 :(得分:2)

您是在谈论应用程序的源代码还是应用程序二进制文件?

我给出的两个案例的答案取决于你正在使用的库。

如果您正在使用可以在任何地方找到的库,这些库在某种程度上是标准的和/或非常大的,您不应该将它们附加到您的应用程序,只需要它们来构建和运行您的应用程序。 / p>

无论如何不要太关心你的源代码:很少有人会构建你的应用程序,他们可能对编程以及Linux系统的工作原理有所了解;要求构建应用程序的许多(也不是那么常见的)依赖性并不是什么大问题 对于二进制版本而言,它可能会有一些问题,因为最终用户通常会对库和编程内容一无所知:您可以选择将最小和最不常见的库静态链接到二进制文件,为了减少依赖。

答案 1 :(得分:0)

你可以这样做,如果你静态链接,但它有点不寻常,根据你的程序应该做什么,你可能会限制自己。

另一种选择,如果这不仅仅是一次性项目,那就是创建一个Linux Standard Base兼容的RPM包,并限制自己链接LSB定义的库和符号。

答案 2 :(得分:0)

在程序上运行ldd以发现所有依赖项,然后将这些依赖项复制到您的目录中,并添加一个发布的程序包装程序脚本

#!/bin/sh
LD_LIBRARY_PATH="${0##*/}:$LD_LIBRARY_PATH" exec "${0##*/}/real-program" "$@";

答案 3 :(得分:0)

在普通的POSIX系统上复制Mac OS X .app行为很困难,因为很难保证一个进程可以找到它自己的可执行文件(有几种方法几乎始终可以工作...)。 Mac OS X为此提供了OS服务,但Linux(例如)没有。

一旦你完成了这一壮举,这就成了可能。但是,正如其他人所提到的,它失去了与使用相同库的其他程序共享资源需求(磁盘空间,RAM空间,缓存空间)的能力,因为您将使用静态副本,或动态加载拥有从.app-like软件包中复制。