5

I finally got GNUstep working (on windows), and it compiles and runs fine. However, whenever I try to use NSLog, I get the following error:

$ gcc -o hello hello.m -I /GNUstep/System/Library/Headers \
> -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base
hello.m: In function 'main':
hello.m:4:5: error: cannot find interface declaration for 'NXConstantString'

My source code:

#import <Foundation/Foundation.h>

int main(void) {
    NSLog(@"hello world");
}
John Howard
  • 61,037
  • 23
  • 50
  • 66
  • After some more experimenting, it seems that I get this error whenever I have a @ before my string, not just when I use NSLog. – John Howard Feb 12 '11 at 04:37
  • Not having an `@` before your string would make it a plain C string, which is the wrong type to use for `NSLog`'s format string. – Peter Hosey Feb 12 '11 at 06:18

3 Answers3

12

It is -

NSLog(@"hello world");

not

 NSlog(@"hello world");  // 'l' should be upper case in NSLog

Try this -

gcc -o hello hello.m -I /usr/lib/GNUstep/System/Library/Headers \
-L /usr/lib/GNUstep/System/Library/Libraries/ -lgnustep-base \
-fconstant-string-class=NSConstantString

How to compile objective c programs using gcc

Romário
  • 1,664
  • 1
  • 20
  • 30
Mahesh
  • 34,573
  • 20
  • 89
  • 115
3

Try the following:

$gcc -o hello hello.m -I /GNUstep/System/Library/Headers -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString

Note

-fconstant-string-class=NSConstantString

without this command it consider constant string objects as a class type NXConstantString.


To run:

$./hello.m or whatever your objective-c code file name.
jonsca
  • 10,218
  • 26
  • 54
  • 62
0

it's very simple just put a space between -lgnustep-base and -fconstant-class=NSConstantString

Wrong way: -lgnustep-base-fconstant-class=NSConstantString

Right way: -lgnustep-base -fconstant-class=NSConstantString

Raghav Sood
  • 81,899
  • 22
  • 187
  • 195