こんにちは、私は学習目的の初心者です c. 「hello.m:1:34: Foundation/Foundation.h: No such file or directory」というエラーが表示される
4 に答える
makefile を作成する必要はありません。上記の Pax が示すように、「すべてのプログラム -> GNUstep -> シェル」から MinGW を起動すると、.m ファイルをコンパイルするだけで済みます。
私の GNUstep インストールは c:\GNUstep\GNUstep\System にあります。異なる場合は、それに応じて Foundation.h のインポートを変更する必要があります。
これは私がしました:
- 次のような c:\myprogs\obj-c\hello\hello.m を作成します。
//--------- こんにちは。
#import <../../GNUstep/System/Library/Headers/Foundation/Foundation.h>
int main(int argc, const char* argv[])
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello from Hello.m!");
[pool release];
return 0;
}
//---------
MinGW シェルを起動します。(上記を参照。)
シェル コマンド ラインで、プログラム コードが配置されているディレクトリに移動します。(これは Unix ではないため、Windows のドライブ文字を含める必要があることに注意してください。):
cd /c/myprogs/obj-c/hello
プログラムをコンパイルします。
gcc -o こんにちは hello.m -I/c/GNUstep/GNUstep/System/Library/Headers \
-L /c/GNUstep/GNUstep/System/Library/Libraries -lobjc -lgnustep-base \
-fconstant-string-class=NSConstantString
(「\」文字を使用すると、コマンドを複数行に拡張できることに注意してください。)
コンパイルすると、次の情報メッセージが表示されます。
Info: resolving ___objc_class_name_NSAutoreleasePool by linking to __imp____objc_class_name_NSAutoreleasePool (auto-import)
Info: resolving ___objc_class_name_NSConstantString by linking to __imp____objc_class_name_NSConstantString (auto-import)
結果の hello.exe を実行すると、次のようになります。
2009-06-03 14:44:59.483 hello[1240] Hello from Hello.m!
この問題は、関連するインクルード ファイルの場所 (つまり、存在するディレクトリ) を gcc に指示していないように見えますFoundation/Foundation.h
。
MinGW の下から、またはコマンド プロンプトから gcc を実行していますか。All Programs -> GNUstep -> Shell"
このシェルを起動する [スタート] メニューに" があるはずです。
このための makefile は、次のように単純にする必要があります。
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = YourProg
YourProg_OBJC_FILES = source_code.m
include $(GNUSTEP_MAKEFILES)/tool.make
ソース コードを GNUStep のホーム ディレクトリに配置する場合、Foundation フレームワークの相対位置を指定する必要はありません。
難解なコマンド ラインを毎回覚えようとするのではなく、makefile を設定してソース フォルダーから make を呼び出すため、paxdiablo で指定されているような makefile を使用するのがおそらく最も簡単です。ただし、Windowsでの私の経験では、GNUStepとWindowsは、シェルを使用しても、必要なすべてのmakeファイルを見つけることができないため、それを使用してビルドしないことが示唆されました-環境変数 GNUSTEP_MAKEFILES を /GNUstep/System/ の値で追加しますライブラリ/メイクファイルを削除してそのシェルを再起動すると、標準のメイクファイルが見つからないというエラーが発生する可能性があります。(メイクファイルへのフルパスを使用しようとしましたが、これには特定のメイクファイルが含まれていることがわかりましたが、それ以上のものを含めようとすると失敗したため、簡単な方法で環境変数を追加しました。)