【问题标题】:How to compile applications for the i386 arch on a x86_64 host如何在 x86_64 主机上为 i386 架构编译应用程序
【发布时间】:2013-07-25 09:55:00
【问题描述】:

在拒绝切换到 x86_64 平台多年之后,我终于做出了切换。主要是因为我想玩弄 docker(FTW:http://docker.io)。

在我的职责范围内,我通常必须为 32 位平台构建应用程序。因此需要在 x86_64 主机上为 i386 编译应用程序。

我使用的是 ubuntu 13.04。在发布这个问题之前,我环顾四周想弄清楚这一点。

以下是我收集到的信息: 1.需要安装gcc-multilib(apt-get install gcc-multilib) 2.需要安装ia32-libs(apt-get install ia32-libs) 3.我们需要指定-m32切换到GCC

因此,我可以为 i386 编译应用程序。 例如。

   $ uname -m
   x86_64
   $
   $ echo -e "#include <stdio.h>\nint main () {return 0;}" > dummy.c
   $ gcc -m32 dummy.c -o dummy
   $ file dummy
   dummy: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xafbf2b3adc5f44a8b5c1e8bcd6de5701ff792abd, not stripped

现在问题来了。当我尝试链接 zlib 库时。

   $ apt-get install zlib1g-dev
   $ apt-get install zlib1g:i386 # the i386 version of zlib 
   $ gcc -m32 dummy.c -o dummy -lz
   /usr/bin/ld: cannot find -lz
   collect2: error: ld returned 1 exit status

我无法弄清楚这个问题。我该如何解决。根据我目前的了解,我已经安装了所有必需的软件包...

我已经研究过使用 一种。 Linux 容器 / 码头工人。 湾。 Ubuntu 13.04 i386 入狱 root。

以上两种方法都有效。但是在达到能够建造的地步之前,还有很多障碍需要克服。

但是有什么比让 i386 应用程序在 x86_64 主机上编译更好的呢。

非常感谢任何帮助。

感谢和问候 〜Sameer

【问题讨论】:

    标签: gcc compilation x86-64 i386


    【解决方案1】:

    您需要为每个库安装 32 位 dev 包。

    在这种情况下,您应该安装:

    sudo apt-get install zlib1g-dev:i386
    

    【讨论】:

    • 谢谢。我还必须安装开发头文件的 i386 版本。我不知道。 $ apt-get install zlib1g-dev:i386 我假设头文件跨平台保持不变。男孩是我错了。再次感谢。
    • 糟糕,我忘记了 libz.azlib1g-dev 中。现在修复了答案。通常,由于类型大小等的宏,不同平台的标头不兼容。
    • 当我尝试安装 libz-dev:i386 link 时有点奇怪。由于该命令,它刚刚摆脱了 gcc。能够安装回来没有任何问题。不知道为什么 apt 摆脱了 gcc。
    • 我总是忘记在点击“Y”之前检查要删除的内容列表。从来没有一个好的错误。我不知道它为什么这样做,它就是这样做的。 :(
    猜你喜欢
    • 2013-03-17
    • 2015-04-23
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多