Re: Compile Objective C 2.0 code on Linux
Re: Compile Objective C 2.0 code on Linux
- Subject: Re: Compile Objective C 2.0 code on Linux
- From: Jean-Daniel Dupas <email@hidden>
- Date: Thu, 18 Dec 2008 17:42:04 +0100
Le 18 déc. 08 à 17:16, Jake McMahon a écrit :
I'm trying to write, compile, and run Objective C 2.0 code on Linux.
I'm not interested in targeting the Mac at all.
So that leaves me with just working with the available source
packages.
On this page: http://www.opensource.apple.com/darwinsource/10.5.6/
-gcc-5465
This is the current Apple gcc 4.0 release
-gcc_42-5531
This is the current Apple gcc 4.2 release
Besides grabbing one of the four above, and the obj4 package, is there
anything else that I really need? I mean, is it even possible to build
Apple's gcc packages on a computer that's not running Mac OS and get
it to compile and run Objective-C 2.0 apps.
I dont think it's possible to compile the obj-c runtime on Linux
(without a lot of works).
And the current Apple Runtime require autozone (the garbage collector
library that is neither ported to linux).
So to compile an objc 2 app, you need to:
- port the autozone library to linux.
- port the apple runtime.
- port the apple compiler (I don't think the apple gcc branche compile
on linux)
And even if you do that, the Apple runtime expect that application
that use it, link on the Foundation framework (I mentioned exception,
but this is not the only feature that rely on Foundation, there is
also more fundamental feature like forwarding), so even after that,
I'm not sure you will be able to run your freshly compiled application.
So basically, at the question, "is it even possible to build Apple's
gcc packages on a computer that's not running Mac OS ?", I will answer
No.
That said, if you are really interested in Obj-C dev on Linux, you
should have a look at the étoilé project. (http://etoileos.com/). This
is an obj-c user environment (set of frameworks). But the author was
not very happy with the GNU runtime, and it did its own runtime. There
is far more chance to see ObjC 2 support in this runtime in the near
futur than seeing it in the GNU runtime.
I don't know what is the current status of the étoilé runtime and
compiler (based on clang), but feel free to contact the étoilé team to
know more about it ( http://etoileos.com/support/team/ ).
On Thu, Dec 18, 2008 at 11:05 AM, Jean-Daniel Dupas
<email@hidden> wrote:
It depends what you want. Do you want to compile Mac OS X binary on
Linux
(and run them on OS X) or produce a Linux binary.
To run, an objc application need a runtime library (libobjc). When
you
compile objc sources, the compiler generate call to this library
and create
structure to represent class and other objc info in a format
defined by
this library.
Actually there is two major runtime. The GNU one (provided with
GCC), and
the Apple one (aka Next Runtime for historical raison) provided on
Darwin
source as the obj4 package.
AFAK, the GNU runtime does not support properties, and other Obj-C 2
features. (I'm not sure it even support @try/@catch and @synchronize)
And the Next/Apple Runtime is not available on Linux.
When you define and access properties in an objc 2 application, the
compiler
generate call to the runtime (like call to objc_getProperty() or
objc_setProperty()). If the installed libobjc does not provide theses
functions, you will not be able pass the linker step.
Le 18 déc. 08 à 16:33, Jake McMahon a écrit :
The run time has been released though. So advanced stuff aside, a
basic 2.0 app that utilizes accessors should work, no?
On Thu, Dec 18, 2008 at 10:07 AM, Jean-Daniel Dupas
<email@hidden> wrote:
Le 18 déc. 08 à 15:50, Jake McMahon a écrit :
I'm trying to install all the necessary tools needed to compile
Objective C 2.0 code on a Linux workstation. I've downloaded the
gcc-5465 package off the Apple website and executed:
../configure --prefix=/tmp/123/ --enable-languages=objc
followed by: make bootstrap
/usr/include/limits.h:125:26: error: no include path in which
to search
for limits.h
make[2]: *** [crtbegin.o] Error 1
make[2]: Leaving directory `/home/user/Download/gcc-5465/xxx/gcc'
make[1]: *** [stage1_build] Error 2
make[1]: Leaving directory `/home/user/Download/gcc-5465/xxx/gcc'
make: *** [bootstrap] Error 2
if I do
make (note, no bootstrap)
../../gcc/objc/objc-act.c: In function 'objc_init':
../../gcc/objc/objc-act.c:716: warning: suggest braces around
empty
body
in an 'if' statement
../../gcc/objc/objc-act.c: In function 'objc_init_exceptions':
../../gcc/objc/objc-act.c:7745: error:
'darwin_macosx_version_min'
undeclared (first use in this function)
../../gcc/objc/objc-act.c:7745: error: (Each undeclared
identifier is
reported only once
../../gcc/objc/objc-act.c:7745: error: for each function it
appears
in.)
../../gcc/objc/objc-act.c: In function
'objc_create_init_utf16_var':
../../gcc/objc/objc-act.c:19227: warning: implicit declaration of
function 'objc_cvt_utf8_utf16'
make[1]: *** [objc/objc-act.o] Error 1
make[1]: Leaving directory `/home/user/Download/gcc-5465/xxx/gcc'
make: *** [all-gcc] Error 2
Is there something I'm missing here? I know there is already a gnu
implementation of objc but I want to use the features of version
2.0.
Any help or suggestions would be GREATLY! appreciated.
Compiling objc 2 on linux is one thing. Running it is another.
Without the Next Runtime on your linux box, you will not be able
to use
Obj-C 2. The Next Runtime and the Gnu Runtime are not compatibles.
Not to mention that a part of the Apple runtime is in the
Foundation
framework (like exception handling),
and even if you managed to port the Next Runtime on Linux, you
will not
be
able to use it for advanced features.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden