大量のメモリを必要とする処理のため、64ビットlinuxの環境でgccを使っております。この環境ですと、当然ポインタが64ビットなのですが、同じ環境で動かすその他のツールはそんなにメモリを使いません。こちらの方はメモリの節約のため、できれば32ビットのメモリモデルを使いたいのです。また、古いプログラムがsizeof(ポインタ) == sizeof(int)が前提で作られているものがあり、いずれ書き直す予定ではありますが、とりあえず動かしてみたいのです。gcc に与えるスイッチの指定などを御教えください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

ど~いうエラーが出ているのかがわからないので適切な回答はできませんが, amd64 を指定してコンパイルされた gcc であれば, デフォルトでは -m32 で 32ビット用, -m64 で 64ビット用のバイナリを生成するはずです. もちろん gcc を作るときに -m32 が無効になっている可能性もありますが.


ちなみに手元環境では /lib と /lib64 という 2つのディレクトリがあり, -m32 でコンパイルしたときには /lib のランタイムライブラリが, -m64 でコンパイルしたときには /lib64 のランタイムライブラリとリンクしています.
ということで, 可能性としては
・gcc が 32ビット用のバイナリを生成できない: これなら多分「-m32 オプションが無効」とかなんとかのメッセージが出るはず.
・32ビット用のライブラリがない: このときには, 実際にはリンカのエラーになっている.
かな. とりあえず -m32 -c で 32ビット用のバイナリが生成できるかどうか確認した方がいいと思う.

この回答への補足

どうやらリンク時のエラーのようです。-cをつけると.oはできていました。
エラーメッセージは以下のとおりです。

/usr/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status

補足日時:2006/08/08 14:28
    • good
    • 0
この回答へのお礼

できました。
yum install glibc-devel.i386
yum install libgcc.i386
やはり32ビット版ライブラリがなかったせいでした。

ありがとうございました。

お礼日時:2006/08/08 14:48

手元の FC3+gcc 3.2.3 では -m32 です.

この回答への補足

-m32はエラーになりました。環境などは#1の補足のとおりです。
gcc -vで出る表示は

Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.5/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.5 20051201 (Red Hat 3.4.5-2)

です。

補足日時:2006/08/08 08:36
    • good
    • 0
この回答へのお礼

#1のお礼にも書きましたとおり、一応は解決しました。

ありがとうございました。

ただ、32ビット環境を使わずに make できるのなら非常に助かります。もし、可能なら御教えください。

お礼日時:2006/08/08 09:02

試したこともないけどgccで386なり486の最適化オプションを


付けてビルドすればいいのでは?
-m386 -m486など
(詳しいオプションはmanで)

でもx64 Linux環境でそのオプション付けた場合って
32ビットコードで吐き出されたとしても64ビット環境で
動くのかは不明。

この回答への補足

-m486とやってみたけど、次のようなテストプログラムで出てくる値は
int main()
{
printf("%d\n", sizeof(void *));
}

8 でした。

もう少し詳しく環境を書いておきます。CPUはopteronでlimuxはCentOS 4.3 x86 64 です。gcc は yum で落としました。

補足日時:2006/08/08 08:35
    • good
    • 0
この回答へのお礼

普通の32ビットのx86環境でコンパイルしたものを持っていったら、動いてしまいました。補足のプログラムは32ビット環境でも64ビット環境でも
4 でした。

というわけで一応は解決です。

ありがとうございました。

でも、64ビット環境でも32ビット環境とものを作ることができれば助かります。もし可能なら方法を知りたいです。

お礼日時:2006/08/08 09:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報