Сергей Борщ 119 13 января, 2008 Опубликовано 13 января, 2008 · Жалоба Выходные файлы пусты, а объектные созданы правильно.Люкс! Теперь осталось в вашем скрипте сделать KEEP() для сегмента, в котором располагаются вектора. Т.е. надо вектора (в crt.s) поместить в отдельную секцию, обозвав ее, скажем, vectors:/* GNU assembler controls */ .vectors /* all assembler code that follows will go into .vectors section */ .arm /* compile for 32-bit ARM instruction set */ .align /* align section on 32-bit boundary */ /* ============================================================ */ /* VECTOR TABLE */ /* */ /* Must be located in FLASH at address 0x00000000 */ /* */ /* Easy to do if this file crt.s is first in the list */ /* for the linker step in the makefile, e.g. */ /* */ /* $(LD) $(LFLAGS) -o main.out crt.o main.o */ /* */ /* ============================================================ */ _vec_reset: b _init_reset /* RESET vector - must be at 0x00000000 */ _vec_undef: b AT91F_Undef_Handler /* Undefined Instruction vector */ _vec_swi: b _vec_swi /* Software Interrupt vector */ _vec_pabt: b AT91F_Pabt_Handler /* Prefetch abort vector */ _vec_dabt: b AT91F_Dabt_Handler /* Data abort vector */ _vec_rsv: nop /* Reserved vector */ _vec_irq: b AT91F_Irq_Handler /* Interrupt Request (IRQ) vector */ _vec_fiq: b AT91F_Default_FIQ_handler /*Fast interrupt request (FIQ) vector */ .text /* place remaining code to .text section */ и в скрипте линкера сделать SECTIONS { . = 0; /* set location counter to address zero */ .text : /* collect all sections that should go into FLASH after startup */ { KEEP(*(.vectors)) *(.text) /* all .text sections (code) */ Вобще-то, насколько я понял из документации (в школе учил французский ), -Wl, - означает "передать следующий флаг линкеру".Да, вы поняли правильно. Так линкер должен эту -Wl получить, т.е. она должна быть передана gcc при линковке (в цели main.out), а у вас ее получал компилятор в целях *.o Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
injen-d 0 13 января, 2008 Опубликовано 13 января, 2008 · Жалоба Добавил: . = 0x0000000; .text : { KEEP(*crt.o (.text)) }>CODE =0 .text : ... (скрипт уже не тот, что в представленном проэкте) О, чудо!!! ВСЕ ЗАРАБОТАЛО!!! :08: Даже из созданной библиотеки libicpsr.a линкуется только используемая функция, хотя я ее (библиотеку) сделал из одного файла! Истина восторжествовала! Огромное спасибо zltigo, но особенное вам, Сергей! ЗЫ: был бы в Риге - поставил бы пиво и, возможно даже, расцеловал бы от счастья! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 13 января, 2008 Опубликовано 13 января, 2008 · Жалоба О, чудо!!! ВСЕ ЗАРАБОТАЛО!!! :08:ЗдОрово. Когда будете переходить на С++, не забудьте сделать KEEP() для секций конструкторов и деструкторов статических объектов *(ctors.*) и *(dtors.*). Вы можете уже сейчас добавить эти строчки в скрипт линкера - пока конструкторов и деструкторов нет, они ни на что влиять не будут. Зато потом можно будет избежать лишней головной боли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться