
大量のメモリを必要とする処理のため、64ビットlinuxの環境でgccを使っております。この環境ですと、当然ポインタが64ビットなのですが、同じ環境で動かすその他のツールはそんなにメモリを使いません。こちらの方はメモリの節約のため、できれば32ビットのメモリモデルを使いたいのです。また、古いプログラムがsizeof(ポインタ) == sizeof(int)が前提で作られているものがあり、いずれ書き直す予定ではありますが、とりあえず動かしてみたいのです。gcc に与えるスイッチの指定などを御教えください。
No.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
できました。
yum install glibc-devel.i386
yum install libgcc.i386
やはり32ビット版ライブラリがなかったせいでした。
ありがとうございました。
No.2
- 回答日時:
手元の 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)
です。
#1のお礼にも書きましたとおり、一応は解決しました。
ありがとうございました。
ただ、32ビット環境を使わずに make できるのなら非常に助かります。もし、可能なら御教えください。
No.1
- 回答日時:
試したこともないけど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 で落としました。
普通の32ビットのx86環境でコンパイルしたものを持っていったら、動いてしまいました。補足のプログラムは32ビット環境でも64ビット環境でも
4 でした。
というわけで一応は解決です。
ありがとうございました。
でも、64ビット環境でも32ビット環境とものを作ることができれば助かります。もし可能なら方法を知りたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ビデオカード・サウンドカード PC版:スーパーロボット大戦30 推奨環境を満たしておりますが、動作(処理)が遅いかもしれません。 1 2023/01/26 13:45
- デスクトップパソコン intel hdグラフィックス3000 4 2022/10/03 14:14
- UNIX・Linux Linuxサーバーのパーティション・ディレクトリの推奨見積もりについて 3 2023/01/17 00:46
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 中古パソコン このPCでOKでしょうか? 3 2022/12/13 07:53
- CPU・メモリ・マザーボード ノートパソコンでゲームを快適にプレイするにはどれくらいのスペックが必要かの? 7 2023/01/27 18:39
- デスクトップパソコン パソコンの動きが遅く悩んでます。相談にのってくれませんか? 11 2023/02/24 15:33
- その他(インターネット接続・インフラ) Zoomで「インターネット接続が不安定です」という表示が出る 2 2022/04/26 14:41
- UNIX・Linux LINUXでのパーティション追加について 1 2022/12/09 11:15
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
<math.h>ヘッダを入力している...
-
VC++6.0をコマンドプロンプ...
-
math.hに含まれる関数が使えない
-
lhafileをインストールしたい
-
python エラー
-
DLLファイルの逆コンパイラにつ...
-
eclipseでデバックするとエラー...
-
error LNK2001: 外部シンボル "...
-
ソフトの開発言語を調べる方法
-
リリースモードとデバッグモー...
-
FindFirstFileについて教えてく...
-
複数のプロジェクトがある場合...
-
ACCESSのDate関数のエラー表示...
-
visual studio 2019 についての...
-
HANDLEの宣言でのエラー
-
DirListBoxに指定フォルダのみ...
-
MO, PO, POT, ファイルの開き方...
-
Windowsアプリケーションをどう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
実行後にコンパイルに失敗しま...
-
math.hに含まれる関数が使えない
-
シリアル通信の受信待ちについて
-
ビープ音が鳴りません・・・
-
C#で char型とstring型の比較で...
-
c言語です コンパイルした時に...
-
共有ライブラリの内容確認について
-
すべてのリビルド: 0 正常、 0 ...
-
64ビットのlinuxで32ビットメモ...
-
C言語で作ったらWindowsでもMac...
-
MS-BASICの逆コンパイルについて
-
<math.h>ヘッダを入力している...
-
ヘッダーファイル『windows.h』...
-
プレコンパイルの意味を教えて...
-
Verilog_HDLでのdefineとifdef
-
[COBOL] ソースの復帰
-
gcc バージョン違いによるコン...
-
同じEXE・同じファイルで解析結...
おすすめ情報