2013-06-07 29 views
6

Tôi đang cố nâng cấp lên yagarto4.7.2 (Tuy nhiên, một chuỗi công cụ GNU ARM khác, đối với những người tự hỏi), đó là gcc và binutils, được chuyển cho Windows. Tuy nhiên, cố gắng để biên dịch một cách đơn giản lãi suất Hello World:Lý do đằng sau việc loại bỏ crt0.o khỏi gcc4.7.x là gì?

c:/yagarto-20121222/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi 
/bin/ld.exe: cannot find crt0.o: No such file or directory 
collect2.exe: error: ld returned 1 exit status 

Bây giờ, trong forum này nó được làm rõ ràng rằng đây là thư viện khởi động initialziation, mà đã được gỡ bỏ sau khi gcc4.6.x. Hai giải pháp được đề xuất:

  • biên dịch với -nostartfiles
  • copy crt0.o hình thành 4.6.x vào thư mục 4.7.x

Cả hai trông khá bẩn và không thể chấp nhận cho mã sản xuất. Vì vậy, có ai biết tại sao thư viện này bị xóa và giờ đây thư viện này tương đương với thư viện?

+1

Một số thông tin chính về * yargarto *; Trình biên dịch * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Xem: [SO gcc newlib questions] (http://stackoverflow.com/search?q= [gcc] + newlib + là% 3Aquestion). Có thể xây dựng kiểu trình biên dịch này với [crosstool-ng] (http://crosstool-ng.org/), nhưng cực kỳ khó vì nó là * chữ thập * của Canada. –

+1

http://stackoverflow.com/questions/18416564/how-to-solve-the-crt0-o-issue-in-cross-compiling – 0x90

Trả lời

3

crt0.o có nguồn gốc từ crt0.s, được hệ điều hành cung cấp. Trong trường hợp thiết lập kim loại trần, tệp này phải được cung cấp bởi việc triển khai. Nó chứa mã khởi động và thoát, ví dụ cho zeroing các .bss.

+1

Không quá ngớ ngẩn - nó tạo ra các cuộc thảo luận trên diễn đàn mà bạn đã cung cấp liên kết đến. SO cũng hoạt động như một cơ sở tri thức, và bạn sẽ cảm thấy tự do để chấp nhận câu trả lời của riêng bạn. –

+1

Tài liệu về các chức năng này: [Newlib syscalls] (http://sourceware.org/newlib/libc.html#Syscalls) bao gồm triển khai * tối thiểu *. –

+0

Vì vậy, bạn đã nhận được crt0.s cho hệ điều hành nào? – harper

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