Связь с GNUstep в Ubuntu 14.04, 64 бит

Я пытаюсь скомпилировать простое приложение, которое ссылается на классы GNUstep, с помощью GNUstep на моей машине с Ubuntu 14.04, 64-битная:

#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;
}

Вот мои флаги компиляции и ссылки (некоторые из которых могут быть излишними):

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

Но при связывании классы Какао, кажется, не извлекаются, и я получаю неопределенную ошибку ссылки:

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

Если я удаляю все ссылки на классы Какао в main.m, приложение компилируется без ошибок.

1 ответ

Решение

Причина, по которой вы не можете найти определение класса для NSPasteboard потому что это в gnustep-config --gui-libs параметры - т.е. символ находится в библиотеке графического интерфейса пользователя GNUStep, а не в базовой библиотеке GNUStep, Решение состоит в том, чтобы изменить LDFLAGS линия к:

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

Вам не нужно указывать дважды -lgnustep-base -lobjc -lm - они являются частью обоих --base-libs а также --gui-libs,

Другие вопросы по тегам