Tôi đang cố gắng xây dựng một dự án đơn giản bằng Yagarto và Eclipse cho nền tảng vi điều khiển ARM. Trong mã khởi động của tôi, tôi có điều này (mà tôi tin là khá chuẩn và nhàm chán):Tại sao tôi có một tham chiếu không xác định đến _init trong __libc_init_array?
void Reset_Handler(void)
{
/* Initialize data and bss */
__Init_Data();
/* Call CTORS of static objects */
__libc_init_array();
/* Call the application's entry point.*/
main();
while(1) { ; }
}
Trừ khi tôi nhận xét ra các cuộc gọi đến __libc_init_array()
, tôi nhận được sau lỗi từ mối liên kết:
arm-none-eabi-g++ -nostartfiles -mthumb -mcpu=cortex-m4 -TC:/Users/mark/workspace/stm32_cpp_test/STM32F40x_1024k_192k_flash.ld -gc-sections -Wl,-Map=test_rom.map,--cref,--no-warn-mismatch -o stm32_cpp_test "system\\syscalls.o" "system\\startup_stm32f4xx.o" "system\\mini_cpp.o" "system\\cmsis\\system_stm32f4xx.o" main.o
d:/utils/yagarto/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb/v7m\libg.a(lib_a-init.o): In function `__libc_init_array':
C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\thumb\v7m\newlib\libc\misc/../../../../../../../newlib-1.20.0/newlib/libc/misc/init.c:37: undefined reference to `_init'
collect2.exe: error: ld returned 1 exit status
Tại sao tôi nhận được lỗi "tham chiếu không xác định" này? Tôi đang thiếu gì? Tôi cho rằng có một số lá cờ liên kết mà tôi đang thiếu, nhưng tôi không thể cho cuộc sống của tôi tìm ra cái gì.
Vì vậy, nếu tôi thêm void _init (void) {} vào mã khởi động của tôi, nó sẽ biên dịch tốt. Tôi tự hỏi chức năng này được cho là phải làm gì? – Mark
_init thường là điểm trong hệ nhị phân mà hệ điều hành nhảy đến nếu một tệp nhị phân đã được tải. Nhãn mặc định cho điểm nhập nhiều hơn hoặc ít hơn. Cách khắc phục sự cố phụ thuộc vào cách thiết lập hệ thống trình tải nhúng của bạn. Đối với tôi, có vẻ như công cụ này không được chuyển hoàn toàn. –
Tôi không có "hệ thống trình tải nhúng", tôi đã tự viết mã khởi động (hoặc, cụ thể hơn là tôi sao chép + dán từ internet) ... Đây là Cortex-M4 và ResetHandler là lần đầu tiên (và chỉ) điều được thực hiện. – Mark