CFLAGS 環境変数を変更せずに 64 ビット Linux マシン上で 32 ビット バイナリをコンパイルする方法
-
16-09-2019 - |
質問
の解決策
gcc/cmake を使用して 64 ビット Linux マシン上で 32 ビットバイナリをコンパイルする方法
すでにCFLAGS変数を使用しているサードパーティソフトウェアやその他のものを使用しているため、これは不可能です。そして、メイクファイルにパッチを適用することは許可されていません - 私の上司は言います。
したがって、それを強制する別の方法を見つける必要があります。gcc への呼び出しを 32 ビット バージョンのコンパイラにリダイレクトするシンボリック リンクを使用した魔法かもしれません (デフォルトのターゲットが動的に検出されないことを願っています)。
解決
ご使用の環境では CFLAGS を変更することは許可されていませんが、ビルドのために一時的に CFLAGS をオーバーライドできない理由はありますか?
autotool ベースのパッケージの場合は、まず次のことを試します。
CFLAGS="-m32" ./configure [opts]
make
make install
よく書かれた configure.ac
ファイルは、パッケージ ソースを変更することなく、CFLAGS 変数を尊重してそれに追加する必要があります。
アップデート
したがって、CC 変数も再定義できないと仮定して、パスのトリックをいくつか試してみます。でシェルスクリプトを作成します ${HOME}/gcc32
呼ばれた gcc
以下のものとなります (未テスト):
#!/bin/sh
/usr/bin/gcc -m32 "$@"
32 ビットをビルドする場合は、これをパスの先頭に追加します。
export PATH=${HOME}/gcc32:${PATH}
明らかな変更はサポートされます g++
, icc
, 、または他のコンパイラ。
他のヒント
のは、gccと友人が「は/ usr / binに」に位置していると仮定しましょう。私たちはまた、あなたのパスにある「〜/ .localの/ binに」という名前のフォルダを持っていると仮定しましょう。
:あなたのような "〜/ .localの/ binに" の "GCC" という名前のbashスクリプトを作成することができます#! /bin/bash /usr/bin/gcc -m32 $@次のように
あなたは同様に、コンテンツと「G ++」スクリプトを作成することができます:
#! /bin/bash /usr/bin/g++ -m32 $@
基本的には、必要に応じてなど、 "LD"、 "と" "C ++"、 "CC"、のためにこれをやり続けます。スクリプトが実行可能にします。 "〜/ .localの/ binが" "は/ usr / binに" 前に、PATH環境変数に含まれていることを確認してください。その場合は、メイクファイルはコンパイラを呼び出すときに、その後、(彼らは相対パスを使用すると仮定すると)、スクリプトではなく、呼び出されます。