我在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错误?
答案 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 派生中的某处。