あなたは64ビットマシン上で32ビットのApacheのDSO(Oracle HTTP Serverの)コンパイルすることはできますか?
-
22-08-2019 - |
質問
私は、Oracleデータベースを移行したとOracle HTTPサーバーは、64ビットマシンに32ビットマシンからインストール - 両方のマシンがLinuxを実行しています。 Oracle Databaseでは、64ビットですが、(アパッチ)HTTPサーバが32ビットである。
私はいくつかのOracle以外のDSO(1用mod_ntlm)を使用しますが、私は標準を実行するたびに、私は64ビットモジュールで終わるタイプのものを「make install」を。
64ビットマシン上で32ビットのApacheモジュールをコンパイルするための標準的な方法はありますか?
解決
アンドリューメディコの答えに代わる方法としては、32ビットのコンパイルのための「-m32
」とPPCまたはSPARCまたはIntelマシン上で64ビット・コンパイルのための「-m64
」を使用 - あなたが実際にあなたが使用しているチップアーキテクチャ言及していないので、その表記は、これらのすべてで動作します。
私は頻繁に使用します:
CC="gcc -m32" ./configure
(64ビットコンパイルを保証するために、または、より頻繁に、CC="gcc -m64"
)32ビットのコンパイルを確実にする。
質問: "?CCはメイクが使用する環境変数です"
回答:はい、この場合にも、それはまた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"
これは、メイクファイル内の任意の設定を上書きします。これとは対照的に、環境変数を使用して、メイクファイルでの設定は、環境変数はあまり有用であるようにCCを設定し、環境の値よりも優先されます。 make -e
はメイクオーバー環境の優先順位を与えるが、通常、使用する危険なオプションである - それは予期しない副作用を持つことができます。
他のヒント
./configure CFLAGS="-march=i686"
それを行う必要があります。
は、GCCで-m32フラグと一緒に、あなたは32ビットと64ビットの両方のライブラリを持っている場合は、適切に32ビットのライブラリに32ビットのオブジェクト・ファイルをリンクするldの-melf_i386フラグを含める必要があります。 64ビットのLinuxマシン上の標準ldは64ビットのライブラリがデフォルトになりますとリンクが発生したときには、互換性のエラーを取得します。