2012-01-14 8 views
24

私のx86 32ビットLinuxシステムでGCC 4.7をビルドしました。私のLinuxディストリビューションによってデフォルトで提供コンパイラがクロスすることができますしながら、GCC:申し訳ありませんが実装されていません:64ビットモードがコンパイルされていません

にコンパイルされていない64ビットモード:私は-m64フラグを使用してクロスコンパイルしようとすると、私は

申し訳ありませんが、未実装を取得します-m64でコンパイルします。

GCCで64ビットモードを有効にするにはどうすればよいですか?

$ /usr/local/bin/g++ -v Using built-in specs. 
COLLECT_GCC=/usr/local/bin/g++ 
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 
Target: i686-pc-linux-gnu 
Configured with: ./configure --enable-multiarch --with-cloog=/usr/local/ --with-mpfr=/usr/local/ --with-ppl=/usr/local/ --verbose --enable-languages=c,c++ 
Thread model: posix gcc version 4.7.0 20120113 (experimental) (GCC) 

EDIT:

--enable-multilibのと--enable-ターゲット= i686の-pc-linux-gnuのよう、x86_64版-PC-これらは私がGCC 4.7を構築するために使用されるオプションですlinux-gnu

状況を変更しないでください。コンパイラはまだコンパイルされていない65ビットモードについて文句を言う:

$ g ++ -v組み込み仕様を使用する。 COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 対象:i686-pc-linux-gnuで構成されます:./configure - 有効-multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages = c、C++ --enable -multilib --enable-targets = i686-pc-linux-gnu、x86_64-pc-linux-gnuスレッドモデル:posix gcc version 4.7.0 20120113(experimental)(GCC)

$ g ++ -m64 c.cpp c.cpp:0:1申し訳ありませんが、実装されていない:

+0

'--enable-multiarch'はDebian(または派生物)を示唆しています。私が覚えているように、FSFのGCCはDebianのマルチカルシステムではうまく機能しません。 DebianのパッチをFSF GCCスナップショットに適用する必要があるかもしれません。 – hvd

+0

もちろん、このようには動作しません。 Multilibは* backward *との互換性があり、* forward *はありません。 32ビットマシン上で64ビットコードをコンパイルするには、binutils + libc [musl、uclibc、glibc、...] + gccの最小SDKを構築する必要があります。 – 0andriy

答えて

9

でコンパイル64ビットモードではない あなたがして構成の両方のbinutilsとgccが必要になります。

--enable-multilib 

、おそらく:

--enable-targets=i686-pc-linux-gnu,x86_64-pc-linux-gnu 

multilibの(-m64および/または-m32オプション)をサポートします。結果のバイナリをリンクして実行するには、glibcのような2つのバージョンのものも必要です。

+0

--enable-multilibと--enable-targets = i686-pc-linux-gnu、x86_64-pc-linux-gnuでは動作しません:$ g ++ -v 組み込み仕様の使用。 COLLECT_GCC = G ++ COLLECT_LTO_WRAPPER =は/ usr/local/libexecに/ GCC/i686の-pc-linux-gnuのよう/ 4.7.0/LTO-ラッパー 対象:を使用して構成のi686-pc-linux-gnuのよう :./configureを - - enable-multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages = c、C++ - x86-64-pc-linux-gnu スレッドモデル:posix gccバージョン4.7.0 20120113(experimental)(GCC) – Martin

+2

binutilsに同じオプション? – rubenvb

+0

これは間違っています*あなたは*前方互換性を得ることができません。 – 0andriy

19

これは、通常、間違った(古い)コンパイラを使用していることを意味します。

新しいコンパイラは、-m32と-m64の両方をサポートします。 Rtoolsの古いコンパイラであるの前に、新しいコンパイラ(Rtoolsのgcc、MinGWサブディレクトリ)にPATHを設定する必要があります。

コンパイラのバイナリlibパスを64ビットバージョンに更新してみてください。 libフォルダのような他のリソースも同様に変更する必要があります。

+1

誰かがこの回答を否定投票した理由を理解できません。私の場合、これは実際の正解でした。 – Anoyz

+0

"あなたのコンパイラのバイナリlibパス"とは何ですか? –

1

この問題は解決しました。 環境変数で、古いC++パッケージのエントリを削除します。

私の場合、私はWindowsの64ビット版Anacondaで働いていました。 anacondaでは、私は 'conda install mingw libpython'を実行しました。 MingwはC++コンパイラです。しかし私は以前Cygwinのアップデートをインストールしていたが、更新されていないC++のコンパイルにはそれが必要だった。これが紛争の理由です。 これらのC++パッケージに対応する環境変数(PATH)を削除するだけで、この問題を解決しました。
私はほとんどすべてのフォーラムを試しましたが、この解決策は動作します。

誰かが助けを必要とする場合はお知らせください。 :)