64ビットシステムで使用しようとしている独自のプログラムがあります。
セットアップを起動すると正常に動作しますが、それ自体を更新していくつかのモジュールをコンパイルしようとすると、ロードに失敗します。
Gccを使用しており、gccが64ビットシステム用にコンパイルしようとしているため、このプログラムはこれらのモジュールを使用できないためだと思われます。
Gccに32ビットプラットフォームのすべてを強制的に実行する方法(環境変数など)はありますか。 32ビットのchrootは機能しますか?
GCCに-m32
フラグを使用させる必要があります。
$PATH
に単純なシェルスクリプトを記述してgccを呼び出すことができます(元のgccを上書きしないようにし、$PATH
で新しいスクリプトが先に来ることを確認します。 GCCへのフルパス。
必要なコードは、シェルに応じて/bin/gcc -m32 $*
のようなものであると思います($*
はすべての引数を含めるためにありますが、それは他の何かかもしれませんが、非常に重要です!)
Alan Pearceの方法を適用して32ビットバイナリを取得できますが、次のようにエラーが発生することもあります。
fatal error: bits/predefs.h: No such file or directory
これが事実であり、apt-getがある場合は、gcc-multilibをインストールするだけです。
Sudo apt-get install gcc-multilib
gcc
/g++
を使用して直接コンパイルするコードの場合、-m32
オプションをコンパイルコマンドラインに追加し、CFLAGS
のCXXFLAGS
、LDFLAGS
およびMakefile
変数を編集するだけです。
使用しているサードパーティコードについては、ビルド時にクロスコンパイル用に構成することを確認する必要があります。 ./configure --help
を実行し、使用可能なオプションを確認します。ほとんどの場合、CFLAGS
、CXXFLAGS
、およびLDFLAGS
変数をconfigureスクリプトに提供できます。また、--build
と--Host
をconfigureスクリプトに追加して、次のようなものにする必要があるかもしれません。
./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --Host=i686-pc-linux-gnu
コンパイルが失敗した場合、これはおそらく64ビットマシンに32ビットの開発パッケージをインストールする必要があることを意味します