2016-08-20 25 views
5

Tôi đang làm theo hướng dẫn sau: https://littleosbook.github.io/#linking-the-kernelCách tạo tệp thực thi ELF trên Mac OS X?

và tôi đang sử dụng máy Mac. Tôi đang ở điểm mà tôi có một tệp đối tượng được tạo từ nasm và tôi muốn biến nó thành tệp thực thi ELF bằng cách sử dụng ld. Các ld trên một mac không giống như nó hỗ trợ định dạng ELF, nhưng tôi không muốn chạy một máy ảo với Ubuntu chỉ để làm bước liên kết này.

Có thể cài đặt GNU ld trên máy mac và chạy nó cùng với máy Mac ld không?

+0

lấy đầu ra của bạn và chạy "file -f " và xem nó nói gì. Tôi sử dụng "clang main.s -mllvm - x86-asm-syntax = intel -o chính" và điều đó mang lại cho tôi "Mach-O 64-bit thực thi x86_64" –

+0

Tôi nghĩ rằng đã ném một lỗi vì nó không biết những gì để làm với một tập tin ELF: "tập tin -f loader.o" đã cho tôi "không thể mở' ELF '(Không có tập tin hoặc thư mục) " – cstack

+0

Nếu bạn đang nghiêm túc nhìn vào phát triển hệ điều hành 32-bit tùy chỉnh trên OS/X tôi' m sẽ giới thiệu ở mức tối thiểu mà bạn có thể muốn xem xét việc tạo trình biên dịch chéo. –

Trả lời

4

Có, bạn có thể. ld là một phần của GNU binutils. Bạn có thể tạo và cài đặt nó như sau:

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 

Cài đặt đó ld đến ~/.local/binutils/bin/ld. Nếu bạn muốn có một binutils 64 bit, hãy sử dụng --target=x86_64-unknown-linux-gnu.