ubuntu - 在 Ubuntu 中的 32 位上交叉编译 64 位程序时缺少包含 "bits/c++config.h"

标签 ubuntu g++ 32bit-64bit cross-compiling ubuntu-10.10

我正在运行 32 位版本的 Ubuntu 10.10 并尝试交叉编译到 64 位目标。根据我的研究,我已经安装了 g++-multilib 包。

该程序是一个非常简单的 hello world:

#include <iostream>

int main( int argc, char** argv )
{
  std::cout << "hello world" << std::endl;
  return 0;
}

编译:

g++ -m64 main.cpp

错误:

In file included from main.cpp:1:
/usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory
compilation terminated.

我找到了一个 c++config.h 文件,但它们位于 i486-linux-gnui686-linux-gnu 下> /usr/include/c++/4.4/ 中的目录 /usr/include/c++/bits 中没有c++config.h >.

关于我遗漏的任何想法?在没有 -m64 标志的情况下编译工作正常(a.out 已创建并正确运行)。

编辑 感谢@nightcracker 的提示,我对 32 位和 64 位系统上的包含结构做了更多调查。我添加了一个 answer下面暂时“修复”了问题,但我认为它会在下一次更新时中断。基本上,我缺少一个名为 /usr/include/c++/4.4/i686-linux-gnu/64 的目录,该目录应该包含一个名为 bits 的子目录,其中缺少包含文件。知道应该用什么包来处理这个问题吗?

最佳答案

部分添加这个答案是因为它解决了我的同一个问题,所以我可以自己为这个问题添加书签。

我能够通过执行以下操作来修复它:

sudo apt-get install gcc-multilib g++-multilib

如果您安装了 gcc/g++ 默认情况下不提供的版本(例如 lucid 上的 g++-4.8 ) 您还需要匹配版本:

sudo apt-get install gcc-4.8-multilib g++-4.8-multilib

关于ubuntu - 在 Ubuntu 中的 32 位上交叉编译 64 位程序时缺少包含 "bits/c++config.h",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4643197/

相关文章:

mysql - 无法从 Ubuntu 计算机中安装的 Ejabberd 连接到 MySQL。 AWS-EC2

c++ - 如何检查 Linux 操作系统中使用的 C++ 版本?

c++ - GCC/G++ 编译器设置 GUI

c - 将 64 位指针存储在 32 位整数中,前提是最大虚拟内存地址 <= UINT32_MAX(例如,当 RAM 大小 <= 4GB 时)

Java/Eclipse 64 位性能

Linux Ubuntu 14.04.1 文件权限

mysql - 在 ubuntu 12.04 上更改 mysql 默认数据目录

linux - 我如何获得 Ubuntu 源代码?

c++ - vc++中是否存在编译器错误? (我是初学者)

c# - GetFontData 在 ASP.NET 应用程序中返回 -1 (GDI_ERROR),但在控制台应用程序中不返回。什么会导致这个?