Saturday, March 23, 2013
obj-c on debian7: success
Actually, I did try to use latest gcc version on debian 7 to compile command-line obj-c program, which I previously wrote on OS X and which makes use of certain Objective C 2 features.
This worked, with a few caveats:
This worked, with a few caveats:
- You need to install gobjc++ and gnustep-devel packages (might be an overkill, but...)
- If you plan to use GNUstep (that's the best way to guarantee compatibility with Apple tool chain), keep in mind that you'll need a special makefile (traditionally named GNUmakefile). Here is manual, and here is a basic example:
include $(GNUSTEP_MAKEFILES)/common.make TOOL_NAME = rat rat_OBJC_FILES = Rational.m Expression.m main.m parser.m rat_HEADER_FILES = Rational.h Expression.h parse.h -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble
- For some reason, debian 7 version of GNUstep is missing definitions of TRUE and FALSE (though BOOL is defined?) and NS_REQUIRES_NIL_TERMINATION (see this recent patch). Therefore, I added this to one of the header files:
#ifdef GNUSTEP #define FALSE 0 #define TRUE 1 #define NS_REQUIRES_NIL_TERMINATION __attribute__((sentinel)) #endif /* GNUSTEP */ - Also, these makefiles as described above require some environment variables; you can use
source /usr/share/GNUstep/Makefiles/GNUstep.sh
to set it up - There are some mysterious problems with version of libgnustep-base.so ; you'll need to somehow convince your linked executable to load system version, e.g.:
pushd ~/GNUstep/Library/Libraries
ln -s /usr/lib/libgnustep-base.so.1.22.1 libgnustep-base.so.1.24 - Also, be mindful of 32/64-bit differences (since OS X is 64-bit only)