AzardCry 0 4 февраля, 2022 Опубликовано 4 февраля, 2022 (изменено) · Жалоба Здравствуйте! В собственных интересах разбираюсь с Keil uVision и уже второй раз встречаюсь с ошибкой вида "Error: L6218E: Undefined symbol referred from __rtentry2.o", в данном случае при попытке написать файл на языке ассемблера. В предыдущий раз ошибка подобного рода звучала как "Error: L6218E: Undefined symbol referred from main.o" при написании на языке Си (было исправлено, не хватало библиотечного файла). В проектах используются 1986ВЕ4У, аналогично в наличии STM32F4 (Discovery board). При настройках, аналогичных сделанным авторами в сети при программировании последнего (на ASM), ошибка никуда не исчезает. Не могу понять, в чём дело и какого файла (декларации) не хватает линковщику. *Полная строка ошибки ".\Objects\ASMSimple.axf: Error: L6218E: Undefined symbol main (referred from __rtentry2.o)." - файл называется "main.s", может это связано? После прочтения ряда тем с подобным вопросом проверил основные причины, которые могли бы вызвать данное сообщения, относящееся к линковщику: 1. Все библиотеки подключены к проекту (в данном случае CORE, Startup для проекта на ASM, где последний запускает тактирование ядра). Внутри main.s, как я понял, указаний на включение текстов библиотек может не быть. 2. Кроме латинских букв в папках и подпапках проекта из подозрительного существуют только пробелы. 3. Все возможные библиотечные файлы дублированы в папке с проектом (хотя их исходники должны лежать и в папке Keil * ""/<>). 4. Вкладка Linker ПО настроена по умолчанию, что вполне позволяло писать программы на Си. 5. Написание "USE_STDPERIPH_DRIVER" (одно из предложений для решения данной проблемы для написания на Си) не помогло. 6. Создание нового проекта/пересборка не помогли, ошибка остаётся. Прошу помочь в решении данной трудности, а также подсказать: 1. Что это за файл __rtentry2.o (.O: Relocatable object files - справка с сайта Keil)? 2. Влияет ли вложенность папки проекта в другие папки на компиляцию? Заранее благодарен! Проект прикрепляю. ASM Simple.7z Изменено 4 февраля, 2022 пользователем AzardCry Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 4 февраля, 2022 Опубликовано 4 февраля, 2022 · Жалоба У вас нет символа main, который нужен стандартной библиотеке. Можно собрать проект без библиотек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AzardCry 0 4 февраля, 2022 Опубликовано 4 февраля, 2022 · Жалоба 3 часа назад, aaarrr сказал: У вас нет символа main, который нужен стандартной библиотеке. Можно собрать проект без библиотек. Как это сделать? Можно какую-нибудь инструкцию по исправлению? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 4 февраля, 2022 Опубликовано 4 февраля, 2022 · Жалоба https://www.keil.com/support/man/docs/armlink/armlink_pge1362065919777.htm Quote The --no_scanlib option prevents the linker from searching the directories for the ARM standard libraries. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AzardCry 0 4 февраля, 2022 Опубликовано 4 февраля, 2022 · Жалоба 4 часа назад, aaarrr сказал: https://www.keil.com/support/man/docs/armlink/armlink_pge1362065919777.htm Данный способ вызывает дополнительные ошибки: .\Objects\ASMSimple.axf: Error: L6218E: Undefined symbol __main (referred from startup_mdr1986be4.o). .\Objects\ASMSimple.axf: Error: L6218E: Undefined symbol __use_two_region_memory (referred from startup_mdr1986be4.o). .\Objects\ASMSimple.axf: Error: L6218E: Undefined symbol __aeabi_uidivmod (referred from system_mdr1986be4.o). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 4 февраля, 2022 Опубликовано 4 февраля, 2022 · Жалоба Тогда верните библиотеки и добавьте (и экспортируйте) символ main в свой ассемблерный код. Стандартная инициализация идет по пути ENTRY (startup.s) -> _main -> main, соответственно, последний должен быть определен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AzardCry 0 6 февраля, 2022 Опубликовано 6 февраля, 2022 · Жалоба 04.02.2022 в 22:12, aaarrr сказал: Тогда верните библиотеки и добавьте (и экспортируйте) символ main в свой ассемблерный код. Стандартная инициализация идет по пути ENTRY (startup.s) -> _main -> main, соответственно, последний должен быть определен. Честно говоря, не совсем понятно, что необходимо сделать. При попытке добавить таковой символ в код в качестве метки (в моём понимании я пытаюсь создать "реализацию" некоторой функции, которая будет являться моей программой) или переменной ошибка не устраняется, при использовании двух одинаковых символов в одной программе появляется соответствующая ошибка... При этом в иных примерах вообще никто "main" не использует. Словом, проблема всё ещё актуальна для решения (и лично для меня остаётся частично загадкой, особенно с учётом того что доступ к ряду библиотек, на которые как на источники реализации функций ссылаются другие библиотеки (речь в т.ч. о Си) попросту недоступны). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 6 февраля, 2022 Опубликовано 6 февраля, 2022 · Жалоба 57 minutes ago, AzardCry said: ошибка не устраняется EXPORT main не забыли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AzardCry 0 6 февраля, 2022 Опубликовано 6 февраля, 2022 (изменено) · Жалоба 16 минут назад, aaarrr сказал: EXPORT main не забыли? Забыл, спасибо! Всё работает Для тех, у кого такая ошибка возникнет - в секции CODE: AREA |.text|, CODE, READONLY EXPORT __main __main Start PROC ... Изменено 6 февраля, 2022 пользователем AzardCry Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 6 февраля, 2022 Опубликовано 6 февраля, 2022 · Жалоба main и __main - это разные вещи. Сейчас вместо библиотечной __main вызывается ваш код. Оно ничего, но, например, глобальные переменные в C-коде инициализированы не будут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg4875 0 16 октября, 2023 Опубликовано 16 октября, 2023 · Жалоба Добрый день. Вы не могли бы подсказать, а как вы определили какого файла не хватает? "В предыдущий раз ошибка подобного рода звучала как "Error: L6218E: Undefined symbol referred from main.o" при написании на языке Си (было исправлено, не хватало библиотечного файла)." У меня почти такая же ошибка. ".\Objects\project_1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o)." Можете помочь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 16 октября, 2023 Опубликовано 16 октября, 2023 · Жалоба 1 час назад, Oleg4875 сказал: У меня почти такая же ошибка. ".\Objects\project_1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o)." Можете помочь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться