реклама на сайте
подробности

 
 
> Сборка проекта с помощью makefile, объясните, где ошибка?
Aaron
сообщение Jul 28 2011, 07:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



В рамках изучения eclipse/gcc/make взял готовый проект для at91sam7s, переделал код под at91sam7a3, дописал нужные функции, добавил парочку сишных файлов, подключил библиотеку at91lib, makefile перековырял существенным образом - замесил вместе из родного проекта и другого, "универсального". Всякие простенькие проекты я уже научился компилировать, makefile вроде тоже теперь мне кажется роднее, чем непонятные кракозябры sm.gif постоянно открыты маны по gcc, as и ld.
Дак вот, в этом проекте все необходимые мне файлы компилируются в объектники (или я всего лишь ошибочно так пологаю), а на этапе линковки вылазит совершенно непонятная мне ошибка. Вот лог из консоли эклипса (неинтересные моменты я удалил):
Цитата
mingw32-make build
--- compiling fromflash.c
--- compiling bootrom.c
--- compiling globals.c
--- compiling usb.c
--- compiling swTimer.c
--- assembling flash-reset.s
--- linking Objects to ELF file...
arm-kgp-eabi-gcc ./compile/obj/fromflash.o ./compile/obj/bootrom.o ./compile/obj/globals.o ./compile/obj/usb.o ./compile/obj/swTimer.o ./compile/obj/flash-reset.o -mcpu=arm7tdmi -mthumb -nostartfiles -Wl,-Map="./compile/lst/BootLoaderROM_FLASH.map" -Wl,-Map="./compile/lst/BootLoaderROM_FLASH.map",--cref,--gc-sections -lgcc -lc -lm -Tldscript-flash -o "./compile/exe/BootLoaderROM_FLASH.elf"
compile/obj/flash-reset.o: In function `start':
E:\work\workspace\Bootloader\bootrom/flash-reset.s:9: multiple definition of `start'
./compile/obj/flash-reset.o:E:\work\workspace\Bootloader\bootrom/flash-reset.s:9: first defined here

compile/obj/flash-reset.o: In function `CallRam':
E:\work\workspace\Bootloader\bootrom/flash-reset.s:39: multiple definition of `CallRam'
./compile/obj/flash-reset.o:E:\work\workspace\Bootloader\bootrom/flash-reset.s:39: first defined here

collect2: ld returned 1 exit status
mingw32-make: *** [compile/exe/BootLoaderROM_FLASH.elf] Error 1

То есть при линковке мне говорят, что в файле flash-reset.s ссылка уже была определена, первичное её положение в этом же файле flash-reset.s sm.gif
Файлы flash-reset.s, makefile и ldscript-flash (на всякий случай) прикладываю.
Прикрепленные файлы
Прикрепленный файл  project_files.zip ( 2.46 килобайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
Petka
сообщение Jul 29 2011, 15:16
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Aaron @ Jul 28 2011, 11:29) *
... на этапе линковки вылазит совершенно непонятная мне ошибка.
....

поменяйте в скрипте линкера строку
".text : { compile/obj/flash-reset.o(.text) *(.text) }"
на
".text : { *flash-reset.o(.text) *(.text) }"

и всё слинкуется.
Go to the top of the page
 
+Quote Post
Aaron
сообщение Jul 30 2011, 09:14
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Я так вроде пробовал - линкер тогда ругается, что не может найти файл flash-reset.o. На работе, конечно, ещё попробую так сделать, чтобы наверняка уже говорить, но имхо ошибка не в этом.
Go to the top of the page
 
+Quote Post
Petka
сообщение Jul 30 2011, 09:54
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Aaron @ Jul 30 2011, 13:14) *
Я так вроде пробовал - линкер тогда ругается, что не может найти файл flash-reset.o. На работе, конечно, ещё попробую так сделать, чтобы наверняка уже говорить, но имхо ошибка не в этом.

Я бы не посоветовал, если бы у меня это успешно не откомпилировалось.
Go to the top of the page
 
+Quote Post
Aaron
сообщение Aug 1 2011, 12:47
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Цитата(Petka @ Jul 29 2011, 19:16) *
поменяйте в скрипте линкера строку
".text : { compile/obj/flash-reset.o(.text) *(.text) }"
на
".text : { *flash-reset.o(.text) *(.text) }"
и всё слинкуется.

Спасибо, помогло.
Теперь встал следующий вопрос при компиляции. Использую библиотеку функций at91lib, в частности файл stdio.c оттуда же.
Цитата
--- linking Objects to ELF file...
c:/devtools/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.6.0/../../../../arm-kgp-eabi/lib/thumb\libc.a(lib_a-impure.o)sad.gif.data._impure_ptr+0x0): multiple definition of `_impure_ptr'
./compile/obj/stdio.o:(.data._impure_ptr+0x0): first defined here

Я ж в мейкфайле нигде не указывал использовать libc, почему он её всё равно линкует? Вот все флаги линкера, которые сейчас включены:
Цитата
linker_flags = -mcpu=$(mcu)
linker_flags += -mthumb
linker_flags += -nostartfiles # from at91lib makefile
linker_flags += $(optimization)
linker_flags += -Wl # from at91lib makefile
linker_flags += -Map="$(mapfile)"
linker_flags += -T$(ld_script)
Go to the top of the page
 
+Quote Post
Petka
сообщение Aug 1 2011, 14:22
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Aaron @ Aug 1 2011, 16:47) *
Я ж в мейкфайле нигде не указывал использовать libc, почему он её всё равно линкует? Вот все флаги линкера, которые сейчас включены:

Потому что это стандартная библиотека Си.
Для отключения стандартной библиотеки есть ключик "-nostdlib"
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016