2016-02-08 3 views
2

Я пытаюсь скомпилировать простое приложение, которое ссылается на классы GNUStep, с GNUstep на моем Ubuntu 14.04, 64 бит, машины:Связи с 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 

А вот выход из «сделать -n»

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

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

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

Если удалить все ссылки на классы Cocoa в 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.

+0

Отлично, это сделал трюк. Спасибо. –

Смежные вопросы