ARM mikroişlemci platformu için Yagarto ve Eclipse kullanarak basit bir proje oluşturmaya çalışıyorum. Benim başlangıç kodunda, bu (İnanıyorum ki oldukça standart ve ilgi çekmeyen) vardır:Neden __libc_init_array içinde _init için tanımlanmamış bir referansım var?
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
: Ben
__libc_init_array()
çağrısı açýklama sürece, bağlayıcı gelen hata şu olsun
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) { ; }
}
Neden "tanımlanmamış başvuru" hatasını alıyorum? Neyi kaçırıyorum? Kaybettiğim bir bağlantı bayrağı var sanırım, ama hayatımın ne için olduğunu anlayamıyorum.
Yani, ince derler. Bu işlevin ne yapması gerektiğini merak ediyorum? – Mark
_init genellikle bir ikili yüklendiyse, OS'nin atladığı ikili sistemdeki noktadır. Giriş noktası için varsayılan etiket az çok. Sorun nasıl çözülür, gömülü yükleyici sisteminizin nasıl kurulduğuna bağlıdır. Bana göre bu alet zinciri mükemmel bir şekilde taşınmadı. –
Ben ... Bu Cortex-M4 (veya daha spesifik I + kopya internetten bunu yapıştırılan) Ben başlangıç kodunu kendim yazdım, bir "gömülü yükleyici sistemi" yok ve ResetHandler çok ilkidir (ve sadece) yürütülen şey. – Mark