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

 
 
 
Reply to this topicStart new topic
> Ошибка линкера
ZAA
сообщение Apr 14 2008, 07:59
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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

Может ,линкер не находит какую-то опцию??? ПОдскажите ,плз!!! Очень надо! help.gif
Go to the top of the page
 
+Quote Post
xelax
сообщение Apr 14 2008, 08:43
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Линкер не может найти библиотечку c именем g Что-то типа g.a
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 14 2008, 09:15
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(xelax @ Apr 14 2008, 11:43) *
Линкер не может найти библиотечку c именем g Что-то типа g.a

а может libg.a


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 14 2008, 10:24
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 14 2008, 13:55
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(ZAA @ Apr 14 2008, 10:59) *
При линковке возникла следующая ошибка (причём и раньше сатлкивалась с ней ,но так и не выяснила ,что она значит):
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

Может ,линкер не находит какую-то опцию??? ПОдскажите ,плз!!! Очень надо! help.gif

Линкер не находит библиотеку libg.a
Эта библиотека то же самое что и libc.a но с отладочной информацией.

Цитата(Сергей Борщ @ Apr 14 2008, 13:24) *
А мне кажется, что автор хочет подключить библиотеку libg.a, но ключ -l указывает не линкеру (ld), а gcc.

gcc без ключа -c выполняет линковку путем запуска ld.
Но для встраиваемых приложений (типа arm-elf-gcc) лучше использовать arm-elf-ld явно.
То есть разделить компиляцию и линковку, и выполнять компиляцию с ключем -c а потом уже линковать все полученные *.o файлы путем вызова arm-elf-ld


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
ZAA
сообщение Apr 14 2008, 15:04
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 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. Спасибо за ответы! smile.gif

Цитата(amw @ Apr 14 2008, 16:55) *
Линкер не находит библиотеку libg.a
Эта библиотека то же самое что и libc.a но с отладочной информацией.
gcc без ключа -c выполняет линковку путем запуска ld.
Но для встраиваемых приложений (типа arm-elf-gcc) лучше использовать arm-elf-ld явно.
То есть разделить компиляцию и линковку, и выполнять компиляцию с ключем -c а потом уже линковать все полученные *.o файлы путем вызова arm-elf-ld


А где вообще взять эту библиотеку и откуда собственно она берется? Просто я не сильно разбираюсь в тонкостях компиляции и линковки 05.gif
Прикрепленные файлы
Прикрепленный файл  efsl_0_2_9_RC7_mt_20070903.zip ( 766.63 килобайт ) Кол-во скачиваний: 52
 
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 15 2008, 07:46
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(ZAA @ Apr 14 2008, 18:04) *
А где вообще взять эту библиотеку и откуда собственно она берется? Просто я не сильно разбираюсь в тонкостях компиляции и линковки 05.gif

Это часть 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.
Go to the top of the page
 
+Quote Post
ZAA
сообщение Apr 15 2008, 08:07
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906



Спасибо - попробуюsmile.gif
Go to the top of the page
 
+Quote Post
axle
сообщение Apr 17 2008, 08:26
Сообщение #9


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167



Цитата(amw @ Apr 14 2008, 20:55) *
Но для встраиваемых приложений (типа arm-elf-gcc) лучше использовать arm-elf-ld явно.
То есть разделить компиляцию и линковку, и выполнять компиляцию с ключем -c а потом уже линковать все полученные *.o файлы путем вызова arm-elf-ld

А чем это лучше? Чем не устраивает использование gcc для линковки? Может я чего-то не знаю?

А будет ли ld автоматически работать с multilib? Ведь когда используешь gcc нужная библиотека выбирается автоматически в зависимости от параметров (например -mthumb).

Еще я когда-то давно натыкался в инете на обсуждение какой-то проблемы линковки и рекомендация была использовать для линковки gcc. Мол в ld баг и gcc об этом знает и обходит его. Вообще похоже на бред, но почему бы так не делать? Чем ld лучше?
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 17 2008, 08:42
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(axle @ Apr 17 2008, 11:26) *
А чем это лучше? Чем не устраивает использование gcc для линковки? Может я чего-то не знаю?

А будет ли ld автоматически работать с multilib? Ведь когда используешь gcc нужная библиотека выбирается автоматически в зависимости от параметров (например -mthumb).

Еще я когда-то давно натыкался в инете на обсуждение какой-то проблемы линковки и рекомендация была использовать для линковки gcc. Мол в ld баг и gcc об этом знает и обходит его. Вообще похоже на бред, но почему бы так не делать? Чем ld лучше?

Ни то ни другое не обязательно. Используйте то, что Вам больше нравиться (ну или то, что болле поддается Вашему контролю).
Использовать gcc для линковки никто не запрещает, а в слуае g++ так и вообще лучше не думать о том какие файлы передать ld для линковки вручную.
На мой взгляд при arm-elf ликовка явным вызовом ld более подконтрольна чем gcc.
Если Вам нравиться линковать вызовом gcc и Вы хорошо себе представляете, что он за собой тащит - пожалуйста.
Одна из проблем с gcc - это libg.a. Часто ее нет, а gcc ее хочет. Часто замена вызова gcc на ld и явное указание -lc вместо -lg (как и явное перечисление действительно нужных стартфайлов в правильном прядке) решает все проблемы такого рода, как в начальном посте.
В большинстве случаев вообще можно обойтись одним crt0.o, а gcc часто тащит crti.o, crtn.o, Mcrt0.o и еще много чего интересного но не нужного в конкретной программе.

С мультилиб, по крайней мере -mthumb у меня работает (правда не знаю зачем - ни разу thumb не использовал в реальных проектах). Для других случаев (типа -mbig-endian) у меня отдельный тулчейн.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
ZAA
сообщение Apr 17 2008, 16:46
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906



У меня в NEWLIB, оказывается, есть эти библиотеки - libg.a, libc.a, libm.a. Вот. Поместила в свой проект - и проблема исчезла!!! Спасибо большое всем за ценные советы!!! Очень помогло smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:48
Рейтинг@Mail.ru


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