2016-08-20 10 views
5

Ich folge diesem Tutorial: https://littleosbook.github.io/#linking-the-kernelWie erstellt man eine ELF-Datei unter Mac OS X?

und ich bin auf einem Mac. Ich bin an dem Punkt, wo ich eine Objektdatei von nasm erstellt habe, und ich möchte es in eine ELF-ausführbare Datei mit ld verwandeln. Die ld auf einem Mac sieht nicht so aus, als ob sie das ELF-Format unterstützt, aber ich möchte keine virtuelle Maschine mit Ubuntu ausführen, nur um diesen Linkschritt zu machen.

Ist es möglich, GNU ld auf Mac zu installieren und es neben Macs ld laufen zu lassen?

+0

nehmen Sie Ihre Ausgabe und führen Sie "file -f " und sehen, was es sagt. Ich benutze "clang main.s-mllm - x86-asm-syntax = intel -o main" und das gibt mir "Mach-O 64-Bit ausführbare x86_64" –

+0

Ich denke, dass ein Fehler geworfen, weil es nicht wusste, was mit einer ELF-Datei zu tun: "Datei-f loader.o" gab mir "kann' ELF 'nicht öffnen (keine solche Datei oder Verzeichnis) " – cstack

+0

Wenn Sie sich ernsthaft um benutzerdefinierte 32-Bit-Betriebssystem-Entwicklung auf OS/X I' Ich werde mindestens empfehlen, dass Sie einen Cross-Compiler erstellen möchten. –

Antwort

4

Ja, Sie können. ld ist Teil von GNU binutils. Sie können es bauen und installieren Sie wie folgt vor:

wget -nc https://ftp.gnu.org/gnu/binutils/binutils-2.27.tar.gz 
tar xzf binutils-2.27.tar.gz 
cd binutils-2.27 
mkdir build && cd build 
../configure --prefix=${HOME}/.local/binutils --target=i386-unknown-linux-gnu 
make -j7 
make install 

Das ld ~/.local/binutils/bin/ld installiert. Wenn Sie 64-Bit-Binutils verwenden möchten, verwenden Sie --target=x86_64-unknown-linux-gnu.