4

私はUbuntu 12を使用しています。

clang を使用して Objective-C の hello_world アプリをコンパイルしようとしています。これはソースです:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
 NSLog (@"hello world");
 [pool drain];
 return 0;
}

私はこのコマンドラインを使用します:

. /usr/share/GNUstep/Makefiles/GNUstep.sh
clang h.m `gnustep-config --objc-flags` -lgnustep-base -o hello

次のエラーが表示されます。

clang: warning: argument unused during compilation: '--param ssp-buffer-size=4'
In file included from h.m:1:
In file included from /usr/include/GNUstep/Foundation/Foundation.h:30:
In file included from /usr/include/GNUstep/GNUstepBase/GSVersionMacros.h:193:
In file included from /usr/include/GNUstep/GNUstepBase/GSConfig.h:229:
/usr/include/GNUstep/GNUstepBase/preface.h:112:11: fatal error: 'objc/objc.h'
      file not found
 #include <objc/objc.h>
          ^
1 error generated.

gcc を使用した同じコマンドラインは問題なく動作します。

この見つからない objc.h エラーを修正する方法はありますか?

4

3 に答える 3

2

obj-ch は Objective-C ランタイムの一部ですが、インストールしましたか? 私自身の経験からすると、GNUstep はほとんどのプラットフォームで被害を受けているようです。そのため、GNUstep の configure スクリプトが、インストールされていてもそれを取得することを拒否している可能性があります。ここでより良い回答が得られない場合は、メーリング リストを試してみてください。

于 2012-07-13T17:21:02.437 に答える
0

そのヘッダーは、ObjC-Runtime の一部として提供されます。GCC はランタイムを提供しますが (ただし、ARC のような最新の機能がないもののみ)、Clang/LLVM はそのようなランタイムを提供しません。Clang を使用する場合は、GNUstep の ObjC ランタイムをインストールする必要があります。これは次の場所にあります。

https://github.com/gnustep/libobjc2

Ubuntu の場合、GNUstep-wiki で利用可能な bash スクリプトがあり、やや複雑な GNUstep インストール プロセスに役立ちます。

http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux

もう 1 つのヒント: あなたがしたように、コンパイラを手動で使用しようとして GNUstep-make を再発明しようとするべきではありません。GNUstep-make を使用することをお勧めします。

http://www.gnustep.org/resources/documentation/Developer/Make/Manual/gnustep-make_1.html

于 2016-07-06T18:57:02.773 に答える