Home Ask Login Register

Developers Planet

Your answer is one click away!

Elector Niklas February 2016

Link with GNUstep on Ubuntu 14.04, 64 bit

I am attempting to compile a simple application that references GNUstep classes, with GNUstep on my Ubuntu 14.04, 64 bit, machine:

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

Here are my compile and link flags (some of which may be overkill):

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

Before compilation I ran the script:


And here is the output from '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

But when linking, Cocoa classes seem to not be pulled in, and I get an undefined reference error:

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

If I remove all references to Cocoa classes in main.m, the app compiles without error.


Petesh February 2016

The reason why you can't find the class definition for NSPasteboard is because it's in the gnustep-config --gui-libs options - i.e. the symbol is in the gui library of GNUStep, not in the base library of GNUStep. The solution is to change the LDFLAGS line to:

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

You shouldn't need to double-specify -lgnustep-base -lobjc -lm - they're part of both --base-libs and --gui-libs.

Post Status

Asked in February 2016
Viewed 2,687 times
Voted 12
Answered 1 times


Leave an answer

Quote of the day: live life