2014-04-16 46 views
8

Tôi đang biên dịch chương trình hello world trong C trên máy Linux 64 bit. Tôi đang sử dụng một toolchain nhúng GCC ARM để biên dịch chương trình của tôi trên một bo mạch FOX G20 V với bộ xử lý ATELSAM9G20 ATMEL.Biên dịch sử dụng arm-none-eabi-gcc và liên kết thư viện liba.a lỗi

Lần đầu tiên, tôi có một vài lỗi khi biên dịch vì chương trình không nhận dạng được printf, trả về các hàm v.v. (các hàm C chuẩn). Vì vậy, tôi quyết định làm mối liên hệ giữa các chức năng, mà tôi tin được định nghĩa trong thư viện libc.a (đúng cho tôi nếu tôi sai), bằng cách làm arm-none-eabi-gcc -o hello hello.c libc.a nhưng kết quả vẫn dẫn đến lỗi:

libc.a(lib_a-exit.o): In function `exit': 
exit.c:(.text.exit+0x16): undefined reference to `_exit' 
libc.a(lib_a-sbrkr.o): In function `_sbrk_r': 
sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk' 
libc.a(lib_a-writer.o): In function `_write_r': 
writer.c:(.text._write_r+0x10): undefined reference to `_write' 
libc.a(lib_a-closer.o): In function `_close_r': 
closer.c:(.text._close_r+0xc): undefined reference to `_close' 
libc.a(lib_a-fstatr.o): In function `_fstat_r': 
fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat' 
libc.a(lib_a-isattyr.o): In function `_isatty_r': 
isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty' 
libc.a(lib_a-lseekr.o): In function `_lseek_r': 
lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek' 
libc.a(lib_a-readr.o): In function `_read_r': 
readr.c:(.text._read_r+0x10): undefined reference to `_read' 
collect2: error: ld returned 1 exit status 

Tôi thực sự không chắc chắn lý do tại sao chương trình vẫn không nhận ra các chức năng tiêu chuẩn mặc dù tôi đã liên kết thư viện với ứng dụng. Nếu bất cứ ai có lý do là tại sao, hoặc một giải pháp như thế nào để tôi có thể khắc phục vấn đề này, tôi sẽ rất biết ơn.

CẬP NHẬT

Tôi đã tải về thư viện glibc từ here. Tôi đã biên soạn và tạo một thư viện tĩnh từ thư viện syscalls.c mà tôi tìm thấy trong newlib-2.1.0/libgloss/arm và khi tôi liên kết thư viện với mã ứng dụng của mình, tôi vẫn gặp lỗi tương tự.

+2

Chính xác bạn đang sử dụng chuỗi công cụ nhúng GCC ARM nào? Có vẻ như các tham chiếu không xác định là các hàm mà bạn (hoặc ai đó) dự kiến ​​viết để tích hợp thư viện 'libc.a' vào nền tảng cụ thể. –

+1

@MichaelBurr Đây là phiên bản 32-bit được xây dựng trước của Linero GCC. Vì vậy, có cái gì mà tôi sẽ phải thêm vào thư viện 'libc.a'? Điều đó có thể là gì nếu như vậy? – Adam

Trả lời

15

Cố gắng thực hiện điều này:

arm-none-eabi-gcc --specs=rdimon.specs -lgcc -lc -lm -lrdimon -o hello hello.c 

toolkit của bạn dường như cung cấp các librdimon.a, thư viện cung cấp các chức năng tiêu chuẩn C cơ bản.

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