1

Oracle データベースと Oracle HTTP サーバーのインストールを 32 ビット マシンから 64 ビット マシンに移行しました。どちらのマシンも Linux を実行しています。Oracle データベースは 64 ビットですが、(Apache) HTTP サーバーは 32 ビットです。

Oracle 以外の DSO (mod_ntlm など) をいくつか使用していますが、標準の「make install」タイプのものを実行すると、64 ビット モジュールになってしまいます。

64 ビット マシンで 32 ビット Apache モジュールをコンパイルする標準的な方法はありますか?

4

3 に答える 3

5

Andrew Medico の回答の代わりに-m32、32 ビット コンパイルには ' -m64'、PPC または SPARC または Intel マシンでの 64 ビット コンパイルには ' ' を使用します。これらすべて。

私はよく使用します:

CC="gcc -m32" ./configure

32 ビット コンパイルを保証するため (または、より頻繁に、CC="gcc -m64"64 ビット コンパイルを保証するため)。


質問: 「CC は make で使用される環境変数ですか?」

回答: はい。ただし、この場合、 によってconfigure生成されるシェル スクリプトであるによっても認識されautoconfます。私が使用した表記 (コマンド ラインで使用するもの) は、configureコマンドの実行中に CC を環境に設定します。他の答えは、以下を使用することを提案しています:

./configure CC="gcc -m32"

私はそれが機能し、ほぼ同じ効果を達成すると思います。私はそれを試していないので、それが機能するかどうかはわかりません。

を実行する./configure --help | lessと、スクリプトの使用方法に関する情報 (多くの場合は標準的な情報) が表示されます。最後に、関連する環境変数 (一部) を一覧表示します。CC はその 1 つです。

C コンパイラを "gcc -m32" に設定する利点は、コンパイラが使用されるたびに 32 ビット フラグが設定されることです。フラグ変数 (CFLAGS など) を設定すると、一部のコマンドがそれを使用しない可能性があり、事態が悪化する可能性があります。

また、質問に戻りますが、make確かにCCという変数(マクロ)を使っています。そして、それを make コマンドラインで設定できます:

make CC="gcc -m32"

これにより、makefile の設定が上書きされます。対照的に、環境変数を使用すると、makefile の設定が環境の値をオーバーライドするため、CC を環境変数として設定してもあまり役に立ちません。makefile より環境を優先しますがmake -e、通常は危険なオプションです。予期しない副作用が発生する可能性があります。

于 2009-03-28T23:51:32.280 に答える
3
./configure CFLAGS="-march=i686" 

それをする必要があります

于 2009-03-28T23:36:18.433 に答える
2

32 ビット ライブラリと 64 ビット ライブラリの両方がある場合、32 ビット オブジェクト ファイルを 32 ビット ライブラリに適切にリンクするには、gcc の -m32 フラグに加えて、ld に -melf_i386 フラグを含める必要がある場合があります。64 ビット Linux ボックスの標準の ld はデフォルトで 64 ビット ライブラリになり、リンクが発生すると互換性エラーが発生します。

于 2009-03-31T16:03:14.143 に答える