4

POSIX API と Linux を使用して C プログラムを作成しています。友人の Mac OSX PC でコンパイルして実行したところ、小さなエラーが発生しましたが、Linux 固有の機能は使用しませんでした。

Linux が API に追加するいくつかの特定の機能を使用します。また、Mac Os X および FreeBSD 用の特定の POSIX 拡張も使用します。
条件付きコンパイルを使用してコードを選択します。OS がそれらのいずれでもない場合は、一般的な POSIX コードを使用します。

私は Darwin/Mac OSX と FreeBSD を所有していません。私の PC にある OS は Linux だけです。FreeBSD は 500 MB を超えているため、ダウンロードしてインストールできません。
プログラムがコンパイルされ、他の POSIX システムで期待どおりに動作するかどうかをテストする方法を知りたいです。
テストを行うための POSIX シミュレーターとコンパイラーがあるのだろうか。
テストは単純で、GUI やドライバは使用せず、コマンド ラインのみです。

FreeBSD、Mac OSX/Darwin、Generic POSIX の 3 つのテストを行う必要がありますが、ツールがありません。

編集

GUI のない FreeBSD と Darwin の最小バージョンはありますが、GCC/G++ と ssh/scp はありますか? ダーウィンは自由ですね。
私のPCは古いですが、仮想マシンにインストールし、仮想ネットワークを作成し、ssh/scpを使用してプログラムを転送してテストできると思います。

4

2 に答える 2

6

簡単な方法の 1 つは、適切な機能テスト マクロを使用してプログラムをコンパイルすることです。たとえば_POSIX_C_SOURCE、ターゲット バージョンの POSIX (現在は200809L) に定義する場合、POSIX ベースで必要/許可されているもの以外は何もプログラムに公開しないシステム ヘッダーを要求します。これは、コマンド ライン CFLAGS を使用して実行できます-D_POSIX_C_SOURCE=200809L。XSI オプション (POSIX ベースのスーパーセットである Single Unix Standard の完全な機能) が必要な場合は、-D_XOPEN_SOURCE=700代わりに使用してください。

これは、POSIX 機能を欠いている特定のシステム (たとえば、OSX が壊れており、sem_initPOSIX では必須であるにもかかわらず、最後にチェックした機能がないなど)、または非標準の動作に依存するコードの記述に起因する問題を検出するのに役立ちません。 POSIX 標準インターフェイス (たとえば、 に渡す式で GNU 正規表現拡張を使用する) で使用されますが、標準にないインターフェイスregcompの偶発的な使用を検出するのに役立ちます。

于 2012-04-29T00:00:16.343 に答える
1

他のシステム用にコンパイルする場合、通常は他のシステムを用意する必要はなく、適切なクロス コンパイラが必要です。

于 2012-04-28T23:03:51.840 に答える