Связь с 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
,