2011-12-15 29 views
21

Nếu bạn có một chương trình C đơn giản, giống nhưChạy bước gcc bằng tay, biên soạn, lắp ráp, liên kết

int main(void) {return 0;} 

Nó có thể được biên soạn với gcc -o test test.c.

Như tôi đã hiểu, gcc thực hiện biên dịch, lắp ráp rồi liên kết. Hai bước sau có thể đạt được bằng cách chạy asld.

Tôi có thể tạo mã lắp ráp bằng cách sử dụng gcc -S test.c.

Bạn sẽ nhập gì vào thiết bị đầu cuối, để chuyển đổi mã lắp ráp thành một tệp thực thi?

(lý do để làm như vậy là để học lắp ráp)

+2

Thực ra nó thực hiện tiền xử lý trước, sau đó biên dịch, sau đó lắp ráp và sau đó liên kết. Tiền xử lý có thể là một phần không thuận lợi của quá trình, đặc biệt nếu bạn sử dụng Boost ... –

+2

Bạn có thể sử dụng tham số '-v' để xem cách GCC gọi các chương trình con của nó, ví dụ: 'gcc -o test test.c -v' – mizo

Trả lời

39

Đây là những giai đoạn khác nhau sử dụng gcc

gcc -E --> Preprocessor, but don't compile 
gcc -S --> Compile but don't assemble 
gcc -c --> assemble but don't link 
gcc with no switch will link your object files and generate the executable 
+2

Phiên bản hiện tại của GCC không có bộ tiền xử lý riêng biệt nữa (bạn có thể yêu cầu xử lý trước như trên), – vonbrand

+0

Câu trả lời hay, quá tệ nó không giải thích quá nhiều – CristiFati

1

Sau khi bạn làm gcc -S -o test.s test.c, gõ gcc -o test test.s.

3

gcc test.s -o test sẽ biên dịch test từ test.s cho bạn.

NASM cũng có thể đáng giá thời gian của bạn - nó có thể dễ dàng hơn/thân thiện hơn gcc để biên dịch tập hợp.

+0

Không thực sự. 'gcc' xử lý rất nhiều hệ thống quan liêu phụ thuộc hệ thống cho bạn, hoàn toàn tương thích với cách xử lý các phần khác của dự án của bạn. – vonbrand

0

Bạn có thể có gcc bắt đầu và dừng quá trình biên dịch ở bất cứ đâu bạn muốn. gcc test.s -o test sẽ có nó biên dịch test.s từ lắp ráp thành một tập tin thực thi.

0

Như bạn có thể hoặc có thể không biết, bốn giai đoạn của biên soạn là để xử lý trước (-E), biên dịch để lắp ráp (-S), lắp ráp để đối tượng mã (-c) và cuối cùng là liên kết. Khó khăn nhất cho tôi để tìm ra là làm thế nào để sử dụng đầu ra tiền xử lý. Dưới đây là cách thực hiện:

gcc -E hello.c | gcc -S -xc -o hello.s - 
gcc -c hello.s -o hello.o 
gcc hello.o -o hello 
Các vấn đề liên quan