|
Ошибка линкера |
|
|
|
Apr 14 2008, 07:59
|
Частый гость
 
Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906

|
При линковке возникла следующая ошибка (причём и раньше сатлкивалась с ней ,но так и не выяснила ,что она значит): Linking: main.elf arm-elf-gcc -mcpu=arm7tdmi -I. -g -DROM_RUN -DVECTORS_IN_ROM -D__WinARM__ -D__WINARMSUBMDL_AT91SAM7S256__ -O0 -ffunction-sections -fdata-sections -Wall -Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=common/Cstartup.lst -I./common -I../../inc -I../../conf -MD -MP -MF .dep/main.elf.d common/Cstartup.o common/swi_handler.o common/Cstartup_SAM7.o main.o dbgu.o syscalls.o swi_handler_user.o systime.o --output main.elf -nostartfiles -Wl,-Map=main.map,--cref,--gc-sections -L./common -L../../ -lefsl -T./common/AT91SAM7S256-ROM.ld /src/gnutools/arm-elf/bin/../lib/gcc-lib/arm-elf/3.2.1/../../../../arm-elf/bin/ld: cannot find -lg collect2: ld returned 1 exit status make: *** [main.elf] Ошибка 1 Может ,линкер не находит какую-то опцию??? ПОдскажите ,плз!!! Очень надо!
|
|
|
|
|
 |
Ответов
|
Apr 14 2008, 10:24
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(MrYuran @ Apr 14 2008, 12:15)  а может libg.a А мне кажется, что автор хочет подключить библиотеку libg.a, но ключ -l указывает не линкеру (ld), а gcc. Соответственно, когда команда доходит до линкера, линкер воспринимает -lg не как команду -l с параметром g, а как имя объектного файла, который и не может найти. Но я не вижу в командной строке -lg, вижу только -g. Вообще, эта командная строка являет собой какую-то дикую смесь из опций компилятора (-ffunction-sections -fdata-sections -Wall -Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -MD -MP -MF .dep/main.elf.d), ассемблера (-Wa,-adhlns=common/Cstartup.lst) и линкера (--output main.elf -nostartfiles -Wl,-Map=main.map,--cref,--gc-sections -L./common -L../../ -lefsl -T./common/AT91SAM7S256-ROM.ld). Подозреваю, что причина в этом. ZAA: прикрепите к сообщению архив с вашим makefile, похоже ошибка где-то в нем.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 14 2008, 15:04
|
Частый гость
 
Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906

|
Цитата(Сергей Борщ @ Apr 14 2008, 13:24)  А мне кажется, что автор хочет подключить библиотеку libg.a, но ключ -l указывает не линкеру (ld), а gcc. Соответственно, когда команда доходит до линкера, линкер воспринимает -lg не как команду -l с параметром g, а как имя объектного файла, который и не может найти. Но я не вижу в командной строке -lg, вижу только -g. Вообще, эта командная строка являет собой какую-то дикую смесь из опций компилятора (-ffunction-sections -fdata-sections -Wall -Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -MD -MP -MF .dep/main.elf.d), ассемблера (-Wa,-adhlns=common/Cstartup.lst) и линкера (--output main.elf -nostartfiles -Wl,-Map=main.map,--cref,--gc-sections -L./common -L../../ -lefsl -T./common/AT91SAM7S256-ROM.ld). Подозреваю, что причина в этом.
ZAA: прикрепите к сообщению архив с вашим makefile, похоже ошибка где-то в нем. Прикрепляю архив проекта. Этот самы злополучный Makefile находится в папке examples->arm_at91sam7. Кстати, это я пытаюсь пример для At91 с файловой системой efsl скомпилировать. причём библиотека libefsl.a нормально собралась. P.S. Спасибо за ответы!  Цитата(amw @ Apr 14 2008, 16:55)  Линкер не находит библиотеку libg.a Эта библиотека то же самое что и libc.a но с отладочной информацией. gcc без ключа -c выполняет линковку путем запуска ld. Но для встраиваемых приложений (типа arm-elf-gcc) лучше использовать arm-elf-ld явно. То есть разделить компиляцию и линковку, и выполнять компиляцию с ключем -c а потом уже линковать все полученные *.o файлы путем вызова arm-elf-ld А где вообще взять эту библиотеку и откуда собственно она берется? Просто я не сильно разбираюсь в тонкостях компиляции и линковки
|
|
|
|
|
Apr 15 2008, 07:46
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(ZAA @ Apr 14 2008, 18:04)  А где вообще взять эту библиотеку и откуда собственно она берется? Просто я не сильно разбираюсь в тонкостях компиляции и линковки  Это часть libc. У вас видимо newlib? Вот там она и есть. Посмотрел проект. Ошибка видимо отсюда (Makefile строка 128) Код # Debugging format. # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. # AVR (extended) COFF requires stabs, plus an avr-objcopy run. #DEBUG = stabs DEBUG = dwarf-2 Замените на Код # Debugging format. # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. # AVR (extended) COFF requires stabs, plus an avr-objcopy run. #DEBUG = stabs DEBUG = 0 Если соберется без ошибок, то для включения отладочной информации попробуйте опции Код # Debugging format. # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. # AVR (extended) COFF requires stabs, plus an avr-objcopy run. #DEBUG = stabs DEBUG = gdb или варианты DEBUG = 1 или DEBUG = 2 или DEBUG = 3
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
Сообщений в этой теме
ZAA Ошибка линкера Apr 14 2008, 07:59 amw Цитата(ZAA @ Apr 14 2008, 10:59) При линк... Apr 14 2008, 13:55 axle Цитата(amw @ Apr 14 2008, 20:55) Но для в... Apr 17 2008, 08:26  amw Цитата(axle @ Apr 17 2008, 11:26) А чем э... Apr 17 2008, 08:42 ZAA У меня в NEWLIB, оказывается, есть эти библиотеки ... Apr 17 2008, 16:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|