Link Ubuntu 14.04,64 位上的 GNUstep

Link with GNUstep on Ubuntu 14.04, 64 bit

我正在尝试编译一个引用 GNUstep 类 的简单应用程序,在我的 Ubuntu 14.04、64 位机器上使用 GNUstep:

#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>

int main(int argc, char **argv)
{
    NSString *bestType = [[NSPasteboard generalPasteboard]
                          availableTypeFromArray: nil];
    NSLog(@"best type: %@", bestType);
    return 0;
}

这是我的编译和 link 标志(其中一些可能有点矫枉过正):

CFLAGS=`gnustep-config --objc-flags` -std=gnu99
LDFLAGS=`gnustep-config --base-libs` -lgnustep-base -lobjc -lm -lglut -lGLU -lGL

编译前我运行脚本:

/usr/share/GNUstep/Makefiles/GNUstep.sh

这是 'make -n'

的输出
gcc main.m `gnustep-config --objc-flags` -std=gnu99 -L. `gnustep-config --base-libs` -lgnustep-base -lobjc -lm -lglut -lGLU -lGL -o tester

但是在linking的时候,Cocoa 类好像没有被拉进来,我得到一个undefined reference error:

/tmp/ccnyXBoH.o:(.data.rel+0x8): undefined reference to `__objc_class_name_NSPasteboard'

如果我在 main.m 中删除对 Cocoa 类 的所有引用,应用程序编译没有错误。

您找不到 NSPasteboard 的 class 定义的原因是因为它在 gnustep-config --gui-libs 选项中 - 即符号在 [=13 的 gui 库中=],不在GNUStep的基础库中。解决方案是将 LDFLAGS 行更改为:

LDFLAGS=`gnustep-config --gui-libs` -lglut -lGLU -lGL

您不需要重复指定 -lgnustep-base -lobjc -lm - 它们是 --base-libs--gui-libs 的一部分。