2014-02-11 96 views
0

如何在32位系统上编译它,以便它可以在64位系统下以向后兼容的方式运行?我知道这可以做到,因为Adobe,Dropbox和其他公司都有这样的二进制文件。我应该如何动态,静态地链接它们?静态只有一些库和其他动态?Linux编译简单程序以在x86和x64上运行

我说的是一个简单的代码,如:

int main() { 
    printf("Hello world!\n"); 
} 

谢谢!

+1

它被称为交叉编译。除非使用诸如configure或cmake之类的工具,否则会有点混乱。你也需要安装gcc进行交叉编译。 –

+1

@Alexis我不会把'-m32'加到一个乱七八糟的命令上,我也不会把它叫做交叉编译,尽管你可能会说这是严格意义上的。 – rubenvb

+0

如果你看看配置脚本,他们甚至会调用64位上的-m32(反之亦然)交叉编译设置...现在我同意,既然你可以在没有特殊解释器的情况下在你的64位平台上运行32位软件,这听起来有点愚蠢。另一种方式虽然... –

回答

2

通常,您可以编译这两个版本,或仅编译一个32位版本,并要求用户安装32位库。

您可以通过为每个命令添加-m32来告诉GCC编译32位。请注意,这需要multilib编译器,并且您需要安装必要的lib32 *文件。

+0

所以,如果我得到这个'./hello:没有这样的文件或目录'在一个32位编译程序的64位系统是因为我缺乏32位库。 – bsteo

+0

@xtmtrx否,可能是因为您的可执行文件不存在或不存在,以及可执行文件。验证输出被称为'hello',然后执行'chmod + x hello',尽管编译器应该自动执行此操作。此外,请执行'ldd hello'并查看是否可以找到所有库。 – rubenvb

+0

是可执行文件。 '不是一个动态的可执行文件'(用静态库编译,但将libc保存为动态文件)。 'hello:GNU/Linux 2.6.15,BuildID [sha1] = 0xdd94b04d4b8bca92e94f3e1ce13a97c180b30493,ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV),动态链接(使用共享库); '-rwxrw-rw- 1 xtmtrx xtmtrx 22068 Feb 11 12:31 hello' – bsteo

3

通常。然后在64位系统上安装32位库。

相关问题