2011-11-28 33 views
7

Làm cách nào để tạo định dạng tệp a.out với gcc trên kiến ​​trúc x86?tạo định dạng tệp a.out với gcc

Với NASM tôi có thể làm điều này một cách dễ dàng với cờ -f, ví dụ:

[[email protected]]$ nasm -f aout start.asm 
[[email protected]]$ objdump -a start.o 

start.o:  file format a.out-i386-linux 
start.o 

[[email protected]]$ 

Trên Linux, biên dịch c file tạo ra một đối tượng tinh. Làm cách nào để tạo tệp a.out với gcc?

+0

Bạn đang sử dụng hệ thống nào? Tôi không nghĩ rằng Linux hỗ trợ a.out thực thi nữa. Tôi không biết về các tệp đối tượng trung gian. –

+0

Tôi tin rằng hạt nhân có thể được cấu hình với hỗ trợ a.out, nhưng nó bị tắt theo mặc định. Đã một thời gian kể từ khi tôi biên dịch hạt nhân, điều đó có thể không còn là trường hợp. – goldfire

+0

Linux hỗ trợ nó nếu 'CONFIG_BINFMT_AOUT' được bật tại thời gian biên dịch. –

Trả lời

11

Để tạo định dạng a.out với gcc, người liên kết của bạn cần được yêu cầu làm như vậy. Bạn có thể làm điều đó bằng cách chuyển cờ từ gcc nhờ cờ -Wl.

Dưới đây là những gì bạn sẽ làm cho các định dạng a.out:

gcc -Wl,--oformat=a.out-i386-linux file.c -o file.out 

Bạn cũng có thể hiển thị tất cả các định dạng được hỗ trợ bằng cách gõ:

objdump -i 
+0

vấn đề là, tôi có nhiều tệp đối tượng (.o) có định dạng elf, vì vậy khi tôi liên kết chúng với tham số OUTPUT_FORMAT (a.out-i386-linux) trong tập lệnh liên kết tôi nhận được lỗi này: "không thể đại diện cho phần '.comment 'trong định dạng tệp đối tượng a.out". Đây là lý do tại sao tôi cần "gcc -c file.c" được biên dịch từ đầu sang định dạng a.out chứ không phải ELF. – Nulik

+0

Tôi tìm thấy giải pháp ở trên, với phần tùy chọn -fno-ident .comment không được tạo, tôi đã khởi động hạt nhân a.out của tôi bằng grub. cảm ơn – Nulik

+0

Xin lỗi, tôi đã bỏ lỡ nhận xét đầu tiên của bạn và vui mừng vì bạn đã tìm thấy bản sửa lỗi cho chính mình :) –

0

Có hai câu trả lời cho câu hỏi này. Một là bạn sẽ cần phải biên dịch một GCC mới với aout là mục tiêu của nó; nó không đơn giản như lật công tắc dòng lệnh. Câu trả lời khác là một câu hỏi: tại sao bạn thực sự cần điều này? Tôi không thể ngay lập tức nghĩ ra một lý do chính đáng.

+1

Tôi đang phát triển hệ điều hành và tôi cần hạt nhân và ứng dụng được đóng gói cùng nhau trong một tệp hình ảnh để nó được tải nhanh chóng với một lần đọc và một ghi (toàn bộ hình ảnh), a.out có vẻ là định dạng lý tưởng cho việc này, đơn giản và được hỗ trợ bởi rất nhiều bộ nạp khởi động. – Nulik

Các vấn đề liên quan