1. ホーム
  2. ウブントゥ

[解決済み】Ubuntuで64bitのプログラムを32bitでクロスコンパイルすると、include "bits/c++config.h" が見つからない。

2022-04-12 19:38:04

質問

Ubuntu 10.10の32bit版を使用しており、64bitターゲットにクロスコンパイルしようとしています。調査に基づいて、私はg++-multilibパッケージをインストールしました。

プログラムはとてもシンプルなハローワールドです。

#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/ はありません。 c++config.h/usr/include/c++/bits .

何が足りないのか、何か思い当たることはありませんか?を付けずにコンパイルすると -m64 フラグは問題なく動作します (a.out は作成され、正しく実行されます)。

編集 nightcrackerさんのヒントのおかげで、32bitと64bitのinclude構造をもう少し調査してみました。私は 回答 の下にある "fixes" は一時的に問題を解決していますが、次のアップデートで壊れると思います。基本的に、私は /usr/include/c++/4.4/i686-linux-gnu/64 というサブディレクトリが含まれているはずです。 bits があり、その中に足りないインクルードファイルがあります。どのパッケージがこれを処理すべきなのか、何か見当がつきますか?

解決方法は?

この回答は、同じ問題の私の問題を解決し、私自身がこの質問をブックマークすることができるので、部分的に追加しています。

以下のようにしたら直りました。

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

のバージョンをインストールした場合 gcc / g++ のように、デフォルトでは出荷されないもの (たとえば g++-4.8 の場合、バージョンも合わせたいところです。

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