23

私が取り組んでいるコードは、ホスト環境と自立環境の両方でビルドできるはずであり、後者の場合のいくつかのstdlib関数のプライベート実装を提供します。

通常のワークステーション/ビルドサーバーでGCCだけでこれを確実にテストできますか?GCCを使用して自立環境用にコンパイルする

  • 「-ffreestanding」オプションは有望に見えましたが、組み込みを無効にし、STDC_HOSTEDマクロを適切に設定する「のみ」のようですが、それでもすべてのシステムヘッダーを提供します。

  • オプション「-nostdinc」は制限が厳しすぎます。自立型の実装に必要なヘッダー(特にstddef.hとlimits.h)を引き続き使用したいと思います。

ここで何が欠けていますか?

ああ、私は今のところGCC 4.4.3を使用していますが、「すぐに」4.5.0にアップグレードします。

4

2 に答える 2

22

まあ、まだ答えが出ていないので、私がどのようにこの仕事をしたかを説明したいと思います. ターゲットシステムによっては面倒な場合がありますが、それは非常に簡単です。

「-nostdinc」を使用すると、標準のシステム インクルード パスがスキップされます。「-I」で指定された他のインクルードパスは、もちろんヘッダーを検索します。

したがって、フリースタンディング ビルド ターゲット用に、「include-freestanding-c89」フォルダーを作成し、関連するシステム ヘッダー ( float.hiso646.hlimits.hstdarg.hstddef.h ) をそこにリンクします。プラットフォームによっては、これらに他のヘッダーが含まれている可能性があるため、いくつかの調査を行い、さらにリンクを設定する必要がある場合があります (したがって、複数のターゲット プラットフォームに対してこれを行う必要がある場合は面倒です)。

C89 ディレクトリは、「include-freestanding-c99」のベースとして使用できます。リンクする追加のヘッダーは、stdbool.hstdint.hです。

使用するコマンドラインは次のとおりです。

gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89 

また

gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99
于 2010-04-23T08:15:47.367 に答える
3

この XenMakefileは、 などgcc -print-search-dirsでディレクトリを取得するために使用しstddef.h、 で追加してから、ビルド-isystemに使用します。-nostdinc

https://github.com/mirage/xen/blob/2676bc915157ab474ee478d929b0928cf696b385/stubdom/Makefile#L35

于 2014-12-17T14:56:47.423 に答える