在clang编译期间无法找到objc.h

时间:2012-07-13 17:07:56

标签: objective-c linux clang gnustep

我在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错误?

3 个答案:

答案 0 :(得分:2)

obj-c.h是Objective-C运行时的一部分,你安装了吗?根据我自己的经验,GNUstep在大多数平台上似乎都是一个受伤的世界,所以它可能只是GNUstep的配置脚本,即使安装它也拒绝接收它,如果你在这里找不到更好的答案,请尝试他们的邮件列表。

答案 1 :(得分:0)

该标题是ObjC-Runtime的一部分。虽然GCC提供了一个runitme(虽然只有一个没有现代功能,如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

还有一个提示:你不应该尝试通过手动使用编译器来重新发明GNUstep-make,就像你一样。更好地使用GNUstep-make:

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

答案 2 :(得分:0)

我是 MacOs 的新手。今天我不得不在 nix 中构建 pyobjc Cocoa python 包装器,并且必须处理 clang。我有类似的错误。作为任何 C 开发人员,我首先使用 I/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/usr/include 扩展了 CFLAGS,但它没有改变任何东西。在挠了很长一段时间后,我尝试仅使用 -I 手动调用 clang 并且它正在工作!所以 -isysroot 禁用 -I 并且不会自行执行任何操作。我找到了 -iwithprefix 并将它与我与 -I 一起使用的路径放在一起,它与 -isysroot 一起使用,我无法轻易删除它 - 它被注入到 CLFAGS 的 nix 派生中的某处。