2016-08-20 58 views
5

Postępuję zgodnie z tym samouczkiem: https://littleosbook.github.io/#linking-the-kernelJak utworzyć plik wykonywalny ELF na Mac OS X?

i używam komputera Mac. Jestem w momencie, w którym mam plik obiektowy utworzony z nasm, i chcę przekształcić go w plik wykonywalny ELF przy użyciu ld. Model ld na komputerze Mac nie wygląda na to, że obsługuje format ELF, ale nie chcę uruchamiać maszyny wirtualnej z Ubuntu, aby wykonać ten krok łącza.

Czy można zainstalować GNU ld na komputerze Mac i uruchomić go razem z komputerem Mac's ld?

+0

Wyjmij dane wyjściowe i uruchom "plik -f " i zobacz, co mówi. Używam "clang main.s -mllvm --x86-asm-syntax = intel -o main", a to daje mi "64-bitowy plik wykonywalny Mach-O x86_64" –

+0

Myślę, że to spowodowało błąd, ponieważ nie wiedział co zrobić z plikiem ELF: "file -f loader.o" dało mi "nie można otworzyć" ELF "(brak takiego pliku lub katalogu)" – cstack

+0

Jeśli poważnie patrzysz na niestandardowy 32-bitowy system operacyjny na OS/X, ja ' zalecam co najmniej, że warto rozważyć utworzenie kompilatora krzyżowego. –

Odpowiedz

4

Tak, możesz. ld jest częścią GNU binutils. można zbudować i zainstalować go w następujący sposób:

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 

który instaluje ld do ~/.local/binutils/bin/ld. Jeśli chcesz mieć 64-bitowe binutils, użyj --target=x86_64-unknown-linux-gnu.