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

 
 
> undefined reference to `_exit', Это уже было...
ajkpro
сообщение Feb 10 2013, 17:19
Сообщение #1





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



Это уже былоhttp://electronix.ru/forum/index.php?showtopic=99348, но там я не "дошел".
Это мой первый опыт, поэтому задаю еще раз.
Вот есть проект https://github.com/h0rr0rrdrag0n/stm32vldis...-linux-template
Вот, автор с описанием этого проекта: http://h0rr0rr-drag0n.blogspot.ru/2011/08/...inux-linux.html

Вот, такая ошибка:
Цитата
rmv7-m/libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text.exit+0x16): undefined reference to `_exit'
collect2: error: ld returned 1 exit status
make: *** [ldall] Ошибка 1


Это я уже понял, что некий деструктор не подхватывается. Но почему у автора и некоторых последователей прошло. Там рекомендуют sys.c, но его нет по ссылке. И другой компилятор сам устраняет проблему.
Как все-таки победить?

Спасибо! Александр.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ajkpro
сообщение Feb 13 2013, 03:49
Сообщение #2





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



Вот, map файл: http://yadi.sk/d/po6sankd2_2yQ



Сообщение отредактировал ajkpro - Feb 13 2013, 03:50
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 14 2013, 14:58
Сообщение #3


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

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



Цитата(ajkpro @ Feb 13 2013, 09:49) *
Вот, map файл: http://yadi.sk/d/po6sankd2_2yQ

Короче, дело в следующем.
1. sys.c - забудьте про него, это совсем из другой оперы.
2. В вашем проекте почему-то вместо файла stm32_lib/device_support/gcc/startup_stm32f10x_md_vl.S используется файл начальной инициализации, предоставляемый компилятором по умолчанию. И он зачем-то вызывает _exit(). Это может быть действительно глюк компилятора.
3. Если вас это устраивает, просто добавьте в файл main.c функцию
Код
void _exit(int i)
{
    while (1);
}

А вообще, тот шаблон, который вы себе выбрали для старта - не очень удачный. Видите, сколько возни для того, чтобы просто скомпилировать его. Лучше возьмите другой шаблон, где всё сразу сделано нормально. Например, вот отсюда.


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





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



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

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

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

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


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

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



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


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





Группа: Участник
Сообщений: 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
alx2
сообщение Feb 18 2013, 04:48
Сообщение #7


Местный
***

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

Сообщений в этой теме
- ajkpro   undefined reference to `_exit'   Feb 10 2013, 17:19
- - AHTOXA   Цитата(ajkpro @ Feb 10 2013, 23:19) Это я...   Feb 10 2013, 18:48
|- - ajkpro   Цитата(AHTOXA @ Feb 10 2013, 22:48) Потом...   Feb 11 2013, 17:36
|- - AHTOXA   Цитата(ajkpro @ Feb 11 2013, 23:36) А там...   Feb 11 2013, 20:05
|- - ajkpro   Цитата(AHTOXA @ Feb 12 2013, 00:05) Но, м...   Feb 12 2013, 03:25
||- - AHTOXA   Цитата(ajkpro @ Feb 12 2013, 09:25) По ка...   Feb 12 2013, 04:35
|- - alx2   Цитата(AHTOXA @ Feb 12 2013, 01:05) Может...   Feb 12 2013, 05:54
|- - ajkpro   Вот, main.c:Код#include "stm32f10x.h" voi...   Feb 12 2013, 17:43
|- - xemul   Кодvoid main(void) { ... while (1...   Feb 13 2013, 09:15
||- - ajkpro   Цитата(xemul @ Feb 13 2013, 13:15) Кодvoi...   Feb 13 2013, 16:39
||- - xemul   Цитата(ajkpro @ Feb 13 2013, 20:39) Ну, ц...   Feb 13 2013, 17:54
||- - ajkpro   Цитата(xemul @ Feb 13 2013, 21:54) Может ...   Feb 13 2013, 18:42
|- - alx2   Цитата(ajkpro @ Feb 12 2013, 22:43) Увы, ...   Feb 14 2013, 05:44
- - _Pasha   Цитата(ajkpro @ Feb 15 2013, 06:47) А нет...   Feb 15 2013, 04:02
|- - AHTOXA   Цитата(_Pasha @ Feb 15 2013, 10:02) Опция...   Feb 15 2013, 04:25
|- - ajkpro   Цитата(AHTOXA @ Feb 15 2013, 08:25) Вроде...   Feb 16 2013, 07:25


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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 11:29
Рейтинг@Mail.ru


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