我正在运行 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-gnu
和 i686-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/