【问题标题】:Compiling For 64bit Architecture in Ubuntu 32bit在 Ubuntu 32 位中编译 64 位架构
【发布时间】:2013-01-24 18:37:45
【问题描述】:

我正在寻找如何在 ubuntu 32 位架构中为 64 位架构编译项目的教程。我必须把这个项目放在 x86_64 架构的共享主机上。我无法在远程机器上编译这个项目,因为我没有权限为这个项目安装一些依赖项。

当我尝试从我的计算机(ubuntu 32 位)放置已编译的项目时,由于浮点异常,执行失败。与简单的 hello_world 应用程序相同的场景。

我是 gcc 和 ld 的初学者,我一直在使用已编译的包,但现在我必须针对与我不同的目标机器进行编译。

现在我发现我需要安装 g++-multilib 并将 CCFLAGS -m64 添加到 gcc。

现在我有这样的错误:

/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc

有没有办法在应用程序中编译依赖库,这样我就不必在远程机器上解析依赖库了。

【问题讨论】:

  • 您有 64 位处理器吗?您不能安装 64 位发行版,并为您的 32 位特定事物使用 32 位 chroot 子系统吗?如果您没有 64 位处理器(例如,只有旧的 ATOM 上网本),您可能会遇到麻烦(因为在 32 位处理器上模拟 64 位机器既痛苦又缓慢)。
  • 在远程机器上有 Intel Xeon E5620 4 核和 x86_64 linux。在我的笔记本电脑上有旧的 Pentium IV 而不是 64 位。我只想编译项目并复制到服务器并在那里运行它。我不想在我的笔记本电脑上运行已编译的项目。

标签: linux gcc shared-libraries static-libraries ld


【解决方案1】:

您需要安装 64 位库包。

apt-get install ibc6-dev-amd64

或类似的东西(我曾经有一台 Ubuntu 机器在工作,但我在家里使用 Fedora,所以我什至无法尝试我的建议 - 我知道原理是正确的,但是具体细节有点模糊)

【讨论】:

  • 这可能仅适用于具有 64 位内核的 64 位处理器。然后,有一个 64 位分布是明智的(并使用 chroot-ed,也许是 debootstrap-ed,内部有 32 位分布)。
  • 虽然已经有一段时间了,但只要编译器(以及汇编器和链接器)是为编译 64 位而构建的,那么在 32 位机器上编译和构建应该没问题。当 AMD 首次推出 64 位处理器时,我和其他人就是这样构建第一个 64 位内核的。构建内核比构建可执行文件更难。当然,要使用 64 位二进制文​​件,您需要在 64 位处理器上安装 64 位操作系统,那么为什么不在该机器上通过 ssh 或类似的方式编译它呢?
猜你喜欢
  • 1970-01-01
  • 2012-10-22
  • 2013-10-20
  • 2011-04-12
  • 1970-01-01
  • 2023-03-20
  • 2017-01-21
相关资源
最近更新 更多