clang编译错误(对objc_autoreleasepoolpush的未定义引用)

Nil*_*ils 5 objective-c clang gnustep

所以,我安装了Ubuntu和clang3.0以及一个简单的program.m:

#include <Foundation/Foundation.h>
int main()
{
        @autoreleasepool{
            NSLog(@"Hi");
        }

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试着像这样编译它:

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc
Run Code Online (Sandbox Code Playgroud)

我明白了

undefined reference to objc_autoreleasePoolPush
undefined reference to objc_autoreleasePoolPop
Run Code Online (Sandbox Code Playgroud)

所以我用Google搜索了一下并安装objc2并尝试:

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc2
Run Code Online (Sandbox Code Playgroud)

但没有变化.也许有人解决了同样的问题?

Wea*_*ter 2

在我的 Ubuntu 系统上安装 libobjc2 后,我会使用以下行编译你的first.m 文件的副本:

clang first.m `gnustep-config --objc-flags` `gnustep-config --objc-libs` \
-I /usr/include/GNUstep/ -lgnustep-base
Run Code Online (Sandbox Code Playgroud)

但也许这只是命令行末尾的一个拼写错误?

第一个示例末尾的 -objc 和第二个示例末尾的 -objc2 指示 clang 编译器分别创建名为 bjc 和 bjc2 的可执行文件。您的意思是 -lobj 吗?我认为 obj 库中的链接对于获取 Objective-C 运行时库至关重要。即使使用 libobjc2 项目,生成的库仍然命名为 libobjc.so.xy 如果您的命令不包含 -lobjc,我不知道它如何正确链接。我可能是错的,但如果没有它,它对我不起作用。