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 的配置脚本即使已安装也拒绝接收它,如果您无法在此处获得更好的答案,请尝试他们的邮件列表。

于 2012-07-13T17:21:02.437 回答
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

于 2016-07-06T18:57:02.773 回答
0

我是MacOs的新手。今天我不得不在 nix 中构建 pyobjc Cocoa python 包装器并且必须处理clang。我有类似的错误。作为任何 C 开发人员,我首先用 CFLAGS 扩展了 CFLAGS I/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/usr/include,但它并没有改变任何东西。在挠了一阵头之后,我尝试手动调用 clang-I并且它正在工作!所以-isysroot禁用-I并且不自己做任何事情。我找到-iwithprefix并把它和我使用的路径放在一起-I,它适用于-isysroot我无法轻易删除的路径——它被注入到 CLFAGS 中的 nix 派生中的某个地方。

于 2021-07-23T21:08:51.720 回答