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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> undefined reference to `_exit', Это уже было...
ajkpro
сообщение Feb 14 2013, 17:21
Сообщение #16





Группа: Участник
Сообщений: 10
Регистрация: 10-02-13
Пользователь №: 75 568



Йесс! Поехало, спасибо! В выходные буду разбираться, сейчас на работе облом. Там у меня немного другое.

А может быть найдется ссылка на проект с stm32f4diskovery? Все-равно мне потом туда переползать.

А мар я распечатал, 13 листов. Обчитаешься!

Спасибо!
Александр.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 14 2013, 17:45
Сообщение #17


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А какой вариант у вас "поехал"?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ajkpro
сообщение Feb 15 2013, 03:47
Сообщение #18





Группа: Участник
Сообщений: 10
Регистрация: 10-02-13
Пользователь №: 75 568



Цитата(AHTOXA @ Feb 14 2013, 21:45) *
А какой вариант у вас "поехал"?

Добавил:
Код
void _exit(int i)
{
    while (1);
}

Но теперь не понятно, почему ругается на _exit, добавил функцию _exit (естественно), но в map`е находим (exit),т.е. без подчерркивания?
Это что-то обозначает? Есть где-нибудь русские комментарии к map?
Александр.
p.s. По английски в следующем сезоне sm.gif
Цитата(alx2 @ Feb 14 2013, 09:44) *
А дальше Вы будете разбираться, почему в Вашем crt0.o есть ссылка на exit, которой, как Вы считаете, там быть не должно...

А нет у меня crt0, ни в проекте, ни в компилляторе. Точнее, нет такого файла. А в проекте даже это слово содержится только в map`е.
Но в компиляторе crt0 встречается в 120 файлах...
Или какие-то опции компиляции не корректно, или чего-то не понимаю.
Александр

Сообщение отредактировал IgorKossak - Feb 15 2013, 09:05
Причина редактирования: лишние пробельные строки
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 15 2013, 04:02
Сообщение #19


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ajkpro @ Feb 15 2013, 06:47) *
А нет у меня crt0, ни в проекте, ни в компилляторе. Точнее, нет такого файла. А в проекте даже это слово содержится только в map`е.

Опция линкера
Код
-Wl,-nostartfiles

имеется?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 15 2013, 04:25
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(_Pasha @ Feb 15 2013, 10:02) *
Опция линкера
Код
-Wl,-nostartfiles

имеется?

Вроде бы -Wl, - не нужно, просто -nostartfiles.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ajkpro
сообщение Feb 16 2013, 07:25
Сообщение #21





Группа: Участник
Сообщений: 10
Регистрация: 10-02-13
Пользователь №: 75 568



Цитата(AHTOXA @ Feb 15 2013, 08:25) *
Вроде бы -Wl, - не нужно, просто -nostartfiles.

-Wl, - имеется, а -nostartfiles добавил и избавился от void _exit(int i) .
И, заодно, минус 4+kb. map тоже укоротился, раза в полтора.

Сообщение отредактировал ajkpro - Feb 16 2013, 08:08
Go to the top of the page
 
+Quote Post
alx2
сообщение Feb 18 2013, 04:48
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(ajkpro @ Feb 15 2013, 08:47) *
Но теперь не понятно, почему ругается на _exit,
Кто на него ругается и как именно?
Если Вы имеете в виду сообщение об ошибке, процитированное в первом посте темы, то оно возникает из-за того что в функции exit() есть ссылка на символ _exit (проще говоря, exit() вызывает _exit()), которого линкер не смог найти. Подробности ищите в документации на используемую Вами библиотеку - там наверняка сказано, что если программист использует exit(), то он должен предоставить функцию _exit().

Цитата(ajkpro @ Feb 15 2013, 08:47) *
добавил функцию _exit (естественно), но в map`е находим (exit),т.е. без подчерркивания?
Это что-то обозначает? Есть где-нибудь русские комментарии к map?
Это означает, что в Вашей программе используется функция exit(). Вызывается она, как я Вам уже говорил, в crt0.o. Какие еще комментарии Вы хотите услышать? Задайте конкретные вопросы, я постараюсь (в меру своего понимания) ответить...

Цитата(ajkpro @ Feb 15 2013, 08:47) *
А нет у меня crt0, ни в проекте, ни в компилляторе. Точнее, нет такого файла.
Как это нет? Покажите вывод команды ls -l /home/ajk/stm32/gcc-arm-none-eabi-4_7-2012q4/arm-none-eabi/lib/armv7-m/crt0.o

Цитата(ajkpro @ Feb 15 2013, 08:47) *
Но в компиляторе crt0 встречается в 120 файлах...
Или какие-то опции компиляции не корректно, или чего-то не понимаю.

Вы чего-то не понимаете. Судя по названию, это Ваш стартап-модуль. Иными словами, это модуль, содержащий код, выполняющийся при старте контроллера (после RESET), и, как правило, содержащий инициализацию среды (инициализацию указателя(ей) стека, секции .data, очистку .bss, выполнение конструкторов глобальных объектов и т.п.), и после этого вызывает main(). А после вызова main() у Вас там, видимо, и вызывается exit(). Если Вы знаете, что main() никогда не вернет управление, просто уберите весь код после вызова main(), так как он все равно не будет выполняться.

Сообщение отредактировал alx2 - Feb 18 2013, 04:51


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post

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

 


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


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