我想知道哪个Linux发行版最好(即引入最少的依赖关系),当链接一个应该尽可能多的发行版对共享库的工作的二进制文件。我应该链接哪个Linux发行版以获得最佳二进制兼容性?
我已经在Ubuntu上完成了它,但依赖列表是可怕的。 SDL引入了PulseAudio等等。我的下一个猜测是使用Debian lenny--在你看来,最好的发行版本是什么?
我想知道哪个Linux发行版最好(即引入最少的依赖关系),当链接一个应该尽可能多的发行版对共享库的工作的二进制文件。我应该链接哪个Linux发行版以获得最佳二进制兼容性?
我已经在Ubuntu上完成了它,但依赖列表是可怕的。 SDL引入了PulseAudio等等。我的下一个猜测是使用Debian lenny--在你看来,最好的发行版本是什么?
如果您看QT文档http://doc.trolltech.com/4.6/deployment-x11.html“创建应用程序包”部分,他们建议创建一个像Mac包一样的包,并使用shell脚本启动它。
你可以做同样的事情;你将不得不创建你需要的库,并将它们包含在你的包中,这会使它更大。至少这应该鼓励你只链接到你需要的库:)
很好的链接,谢谢。我计划包含所有必需的共享对象 - 除了LSB库之外。你建议我自己建立我需要的库吗?我可能会构建如果我这样做的话,SDL几乎没有依赖关系,但我不确定我可以如何教CMake与之相关联。 – Noarth 2010-08-24 04:52:51
我没有看到需要重建已经构建的库,只要您有权重新包装它们与您的应用程序,并且您的应用程序将动态链接到它们。如果你自己构建它们,你会更了解它们的依赖关系。 – koan 2010-08-24 11:03:34
是的,我也可以摆脱一些。我正在查看WorldOfGoo附带的libSDL,它有大约6个依赖关系。然而,在Ubuntu上安装的软件包大约有10个。另外,这些库需要比libstdC++和libc更新的版本。 Debian lenny。 – Noarth 2010-08-24 18:14:34
如果您不想发布源代码并使用安装脚本在目标系统上编译它,请提供静态链接的所有内容或发布自己的文件,并在用于启动您的脚本中使用LD_LIBRARY_PATH
和LD_PRELOAD
环境变量可执行文件。 (关于如何完成的一个例子可以在mozilla firefox包装中看到)
也有法律问题适用:从不使用GPL代码。并且永远不要与LGPL代码进行静态链接(以及其他问题)。
任何其他解决方案都会给运气好坏带来太多空间,并且只会产生挫折感。
哦,非常好的提示与静态链接和LGPL代码,我会错过的... – Noarth 2010-08-24 04:53:41
如果我没有记错,在一个将pulseaudio作为SDL依赖项的发行版上与SDL链接并不意味着您的程序必须始终与每个发行版中的pulseaudio链接。你实际上不必在编译器上输入-lpulseaudio
,是吗?我的Ubuntu盒子上的sdl-config --libs
没有列出它。
为Linux生成软件的正确方法是将每个版本的源代码tarball放在你网站的稳定位置,并让分布处理所有其他事情。不要尝试自己制作二进制文件。你会从无尽的悲伤中拯救自己。
投票结束,因为这显然是一个主观的问题,在不同的发行版上有太多的意见......并且这不是一个编程问题....请参考Superuser.com或serverfault.com – t0mm13b 2010-08-23 20:58:01
我不是问哪个分布是“最好的”,我要求提供分布的建议,尽可能少地引入依赖关系。这不是关于编程,而是编译 - 与IMO有关。 – Noarth 2010-08-23 21:08:24
问题是相关的。 – ypnos 2010-08-24 09:12:19