Compiling Objective-C project on Linux (Ubuntu)

compilation, linux, objective-c, ubuntu

Solution

It's right. In both cases you did not include `Fraction.m` in your list of files to be compiled, so it can't find the implementation of the class `Fraction`

From the comment, this command works

gcc `gnustep-config --objc-flags` -o main *.m -lobjc -lgnustep-base

Problem

How to make an Objective-C project work on Ubuntu? My files are: Fraction.h ``` #import <Foundation/NSObject.h> @interface Fraction: NSObject { int numerator; int denominator; } -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; -(int) numerator; -(int) denominator; @end ``` Fraction.m ``` #import "Fraction.h" #import <stdio.h> @implementation Fraction -(void) print { printf( "%i/%i", numerator, denominator ); } -(void) setNumerator: (int) n { numerator = n; } -(void) setDenominator: (int) d { denominator = d; } -(int) denominator { return denominator; } -(int) numerator { return numerator; } @end ``` main.m ``` #import <stdio.h> #import "Fraction.h" int main( int argc, const char *argv[] ) { // create a new instance Fraction *frac = [[Fraction alloc] init]; // set the values [frac setNumerator: 1]; [frac setDenominator: 3]; // print it printf( "The fraction is: " ); [frac print]; printf( "\n" ); // free memory [frac release]; return 0; } ``` I've tried two approaches to compile it: Pure gcc: ``` $ sudo apt-get install gobjc gnustep gnustep-devel $ gcc `gnustep-config --objc-flags` -o main main.m -lobjc -lgnustep-base /tmp/ccIQKhfH.o:(.data.rel+0x0): undefined reference to `__objc_class_name_Fraction' ``` I created a GNUmakefile Makefile: ``` include ${GNUSTEP_MAKEFILES}/common.make TOOL_NAME = main main_OBJC_FILES = main.m include ${GNUSTEP_MAKEFILES}/tool.make ``` ... and ran: ``` $ source /usr/share/GNUstep/Makefiles/GNUstep.sh $ make Making all for tool main... Linking tool main ... ./obj/main.o:(.data.rel+0x0): undefined reference to `__objc_class_name_Fraction' ``` So in both cases compiler gets stuck at ``` undefined reference to `__objc_class_name_Fraction' ``` Do you have and idea how to resolve this issue?

Original source