Compilieren unter Mac OS X Snow Leopard



  • Oh.. was machen wir denn da?



  • Cuervo schrieb:

    Oh.. was machen wir denn da?

    Man könnte beim gcc noch den Parameter --verbose (glaube ich) angeben, vielleicht sieht man da mehr...



  • *ähm.. naja..

    `gcc *.o --script=kernel/kernel.ld -nostdinc -o kernel/KERNEL.BIN -arch i386 -m32 --verbose

    Using built-in specs.

    Target: i686-apple-darwin10

    Configured with: /var/tmp/gcc/gcc-5646.1~2/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/[cg][.-]*/s//s//-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10

    Thread model: posix

    gcc version 4.2.1 (Apple Inc. build 5646) (dot 1)

    /usr/libexec/gcc/i686-apple-darwin10/4.2.1/collect2 -dynamic -arch i386 -macosx_version_min 10.6.2 -weak_reference_mismatches non-weak -o kernel/KERNEL.BIN -lcrt1.10.6.o -L/usr/lib/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.. ckernel.o cmos.o data.o descriptor_tables.o elf.o flpydsk.o flush.o fs.o gdt.o initrd.o interrupts.o irq.o kernel.o keyboard.o kheap.o list.o math.o paging.o pci.o process.o shared_pages.o syscall.o task.o time.o timer.o util.o video.o -lSystem -lgcc -lSystem

    Undefined symbols:

    "__kernel_beg", referenced from:

      __kernel_beg$non_lazy_ptr in paging.o
    

    "__kernel_end", referenced from:

      __kernel_end$non_lazy_ptr in paging.o
    

    ld: symbol(s) not found

    collect2: ld returned 1 exit status

    make: *** [ckernel] Error 1`



  • Soweit ich gelesen habe bringt Mac OS kein binutils mit. Das ld ist daher nicht das GNU ld, sondern eine Eigenkreation von Apple. Diese unterstützt zum einen nur das macho Format und hat keine Unterstützung für Linkerscripte. Der mitgelieferte gcc ist natürlich auch darauf getrimmt diesen Linker zu nutzen.

    Die beste Lösung wäre sich ein (ordentliches) gcc und ld zu besorgen/bauen und diese dann einsetzen. Stichwort cross-compiler.



  • Ok, ich hab mal alle ports gesucht, welchen soll ich nehmen?

    apple-gcc33 @1823 (lang)
    Apple's version of gcc 3.3

    apple-gcc40 @5465 (lang)
    Apple's version of gcc 4.0

    apple-gcc42 @5531 (lang)
    Apple's version of gcc 4.2

    apple-gcc42-devel @5564 (lang)
    Updated version of Apple's version of gcc 4.2

    arm-aout-gcc @3.3.6 (cross, devel)
    gcc cross-compilers for arm-aout, with newlib runtime library.

    arm-elf-gcc @4.3.2 (cross, devel)
    gcc cross-compilers for arm-elf, with newlib runtime library.

    arm-elf-gcc3 @3.4.6 (cross, devel)
    gcc 3.x cross-compilers for arm-elf, with newlib runtime library.

    arm-none-linux-gnueabi-gcc @2005q3-2 (cross, devel)
    gcc 3.x cross-compilers for arm-none-linux-gnueabi.

    arm-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for arm-rtems, with newlib runtime library.

    avr-gcc @4.0.2 (cross, devel)
    gcc cross-compilers for avr

    gcc33 @3.3.6 (lang)
    The GNU compiler collection

    gcc34 @3.4.6 (lang)
    The GNU compiler collection

    gcc40 @4.0.4 (lang)
    The GNU compiler collection

    gcc41 @4.1.2 (lang)
    The GNU compiler collection

    gcc42 @4.2.4 (lang)
    The GNU compiler collection

    gcc43 @4.3.4 (lang)
    The GNU compiler collection

    gcc44 @4.4.2 (lang)
    The GNU compiler collection

    gcc45 @4.5-20091217 (lang)
    The GNU compiler collection, prerelease BETA

    gcc_select @0.1 (sysutils)
    Switch the default compiler

    gccmakedep @1.0.2 (x11, devel)
    Create dependencies in makefiles using 'gcc -M'

    gccxml @0.6.0 (lang)
    generates XML description of C++ code

    gccxml-devel @20090713 (lang)
    generates XML description of C++ code

    gnat-gcc @4.4.2 (lang)
    The GNU compiler collection with GNAT

    i386-elf-gcc @4.3.2 (cross, devel)
    gcc cross-compilers for i386-elf, with newlib runtime library.

    i386-mingw32-gcc @3.4.5-20060117-2 (cross, devel)
    Mingw32 cross-compiler for i386-Win32

    i386-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for i386-rtems, with newlib runtime library.

    i960-rtems-gcc @3.2.3 (cross, devel)
    gcc cross-compilers for i960-rtems, with newlib runtime library.

    lcov @1.7 (devel)
    LCOV is a graphical front-end for GCC's coverage testing tool gcov.

    llvm-gcc42 @2.6 (lang)
    llvm is a next generation compiler infrastructure

    m68k-elf-gcc @3.4.6 (cross, devel)
    gcc cross-compilers for m68k-elf, with newlib runtime library.

    m68k-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for m68k-rtems, with newlib runtime library.

    mips-elf-gcc @3.4.6 (cross, devel)
    gcc cross-compilers for mips-elf, with newlib runtime library.

    mips-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for mips-rtems, with newlib runtime library.

    mipsel-linux-gcc34 @3.4.6 (cross)
    gcc cross compiler for mips-linux with uClib

    powerpc-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for powerpc-rtems, with newlib runtime library.

    py26-pygccxml @1.0.0 (python, devel)
    pygccxml is a python interface to gcc-xml

    sh-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for sh-rtems, with newlib runtime library.

    sparc-rtems-gcc @4.2.3 (cross, devel)
    gcc cross-compilers for sparc-rtems, with newlib runtime library.



  • Entweder gcc44 oder i386-elf-gcc – allerdings fehlen dann noch die binutils, also ld. 😉



  • XanClic schrieb:

    Entweder gcc44 oder i386-elf-gcc – allerdings fehlen dann noch die binutils, also ld. 😉

    Unter Windows verwende ich (logischerweise) auch einen Crosscompiler, der afair auch "i386-elf-gcc" heißt. Da ist ld aber mit dabei, vielleicht hier ja auch?



  • Ausschließen will ich es nicht, aber dann hätte das Paket einen irreführenden Namen – weil ld nunmal zu den binutils und nicht zu gcc gehört.


  • Mod

    gcc ohne ld macht doch keinen Sinn?



  • ld gehört aber nicht zur GCC (also zur GNU Compiler Collection), sondern zu besagten GNU binutils. Es ist halt einfach so. 😉

    (Wenn man also die Quellcodepakete einzeln runterlädt und kompiliert, hat man nach Kompilieren von GCC halt nur den Compiler und muss dann noch die binutils kompilieren, um den etwas sinnvolles tun zu lassen)



  • ENDLICH! ICH HABE ES GESCHAFFT!

    Ich kann jetzt mit meinem Mac PrettyOS compilieren! Vielen Dank an alle, die mir geholfen haben.

    (Sollte jemand eine Anleitung benötigen, so ist dies bitte hier zu melden!)


  • Mod

    Sehr gut! Wir wollen niemanden verlieren. 🙂



  • Cuervo schrieb:

    (Sollte jemand eine Anleitung benötigen, so ist dies bitte hier zu melden!)

    Es wäre allgemein nicht schlecht wenn du zumindest grob beschreiben würdest was du gemacht hast. Dann hätte man etwas was man Mac Usern sagen kann, oder man könnte einen Hinweis ins Tutorial für die ersten Schritte unter Mac OS einbauen.



  • Super, dann hab ich hier was vorbereitet:

    http://www.fanofblitzbasic.de/prettyos/PrettyOSMacOSX.pdf


  • Mod

    Danke für den Beitrag! 👍


Anmelden zum Antworten