Перейти к содержанию
    

Ошибка L6218E: Undefined Symbol

Здравствуйте!

 

В собственных интересах разбираюсь с 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

Изменено пользователем AzardCry

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас нет символа main, который нужен стандартной библиотеке. Можно собрать проект без библиотек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, aaarrr сказал:

У вас нет символа main, который нужен стандартной библиотеке. Можно собрать проект без библиотек.

Как это сделать? Можно какую-нибудь инструкцию по исправлению?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, aaarrr сказал:

Данный способ вызывает дополнительные ошибки:

.\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).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда верните библиотеки и добавьте (и экспортируйте) символ main в свой ассемблерный код. Стандартная инициализация идет по пути ENTRY (startup.s) -> _main -> main, соответственно, последний должен быть определен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

04.02.2022 в 22:12, aaarrr сказал:

Тогда верните библиотеки и добавьте (и экспортируйте) символ main в свой ассемблерный код. Стандартная инициализация идет по пути ENTRY (startup.s) -> _main -> main, соответственно, последний должен быть определен.

Честно говоря, не совсем понятно, что необходимо сделать. При попытке добавить таковой символ в код в качестве метки (в моём понимании я пытаюсь создать "реализацию" некоторой функции, которая будет являться моей программой) или переменной ошибка не устраняется, при использовании двух одинаковых символов в одной программе появляется соответствующая ошибка... При этом в иных примерах вообще никто "main" не использует.

 

Словом, проблема всё ещё актуальна для решения (и лично для меня остаётся частично загадкой, особенно с учётом того что доступ к ряду библиотек, на которые как на источники реализации функций ссылаются другие библиотеки (речь в т.ч. о Си) попросту недоступны).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, aaarrr сказал:

EXPORT main не забыли?

Забыл, спасибо! Всё работает

 

Для тех, у кого такая ошибка возникнет - в секции CODE:

 

AREA |.text|, CODE, READONLY

EXPORT __main

__main

Start PROC

...

Изменено пользователем AzardCry

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

main и __main - это разные вещи. Сейчас вместо библиотечной __main вызывается ваш код. Оно ничего, но, например, глобальные переменные в C-коде инициализированы не будут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

Вы не могли бы подсказать, а как вы определили какого файла не хватает?

"В предыдущий раз ошибка подобного рода звучала как "Error: L6218E: Undefined symbol referred from main.o" при написании на языке Си (было исправлено, не хватало библиотечного файла)."

У меня почти такая же ошибка.

".\Objects\project_1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o)."

Можете помочь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Oleg4875 сказал:

У меня почти такая же ошибка.

".\Objects\project_1.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o)."

Можете помочь?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...