2010-06-12 124 views
4

我的.deb软件包,构建于32位Ubuntu上,包含用gcc编译的可执行文件,不会安装在64位版本的操作系统上(错误消息显示为'错误的架构i386')。这让我感到困惑,因为我认为一般来说32位软件在64位硬件上工作,反之则不然。为什么在64位Ubuntu上不安装32位.deb软件包?

是否可以生成一个.deb文件,我可以使用我的32位机器在64位操作系统上安装?是否只是使用适当的编译器标志来生成可执行文件(如果是的话),还是.deb文件本身对某个处理器体系结构有某种特定性?

回答

6

deb安装程序可能拒绝安装您的软件包,因为它(正确)标有冲突的体系结构:字段。 i386代码可以在amd64机器上执行,但它要求存在所有适当的依赖关系(32位库等)。最好为每个体系结构构建独立的包。

是的,你可以在你的32位机器上构建64位。这就是所谓的交叉编译,它需要你为此创建一个构建环境。要开始,您可能需要查看dpkg-cross和apt-cross工具。

或者,您可以安装运行64位操作系统的虚拟机,然后为您的辅助体系结构进行构建。

2

该体系结构只是debian软件包的配置文件中的一个选项。默认情况下它使用uname中的那些。你可以重写它,但有一个更简单的方法。

通常,大多数32位程序在64位上运行良好。但是,除非您有一台非常旧的PC,否则在虚拟机虚拟机中安装一个小型64位debian也非常容易。你可能只需要base + build essentials + dev库。这不会占用大量的磁盘空间。如果您可以腾出2G磁盘空间,只需安装一个桌面debian。

还有更多的选项可以进行交叉编译,具有不同程度的自动化。

我经常使用virtualbox方法。它很容易和快速。

如果你运行64位linux做一个32位环境就像mkdebootstrap + linux32 + chroot一样简单。

+0

任何事情都是可能的。我已经看到了解决方案的架构依赖的东西在不同的目录中,这些目录是在postinst中选择的,并将它们放在符号链接的位置。您也可以将您的软件包拆分成共享软件包,并将独立于架构的pkgs分开。所有这些选项都是“非标准实践”,导致返工和复杂的程序。这是迄今为止创建2个软件包的最佳选择。 – 2010-06-12 07:22:07

相关问题