Undefined external «__iar_HWMUL»
Technical Note 79022
Updated:
5/31/2018 9:14 AM
Introduction
Trying to build an established project using IAR Embedded Workbench for MSP430 version 6.20 (or later), linking fails with the message
Error[e46]: Undefined external "__iar_HWMUL" ...
Suggested solution
Use the default linker xcl-file for the installation you are using.
Background
The symbol __iar_HWMUL was introduced with IAR Embedded Workbench for MSP430 version 6.20.
Using lnk430f149.xcl as example, there are new lines as below:
// -----------------------------------------------
// Hardware multiplier location
//
-D__iar_HWMUL=130
Note
In general, there are good reason to use only matching versions (e.g., header files, xcl-files, libraries, tools from the same release).
All product names are trademarks or registered trademarks of their respective owners.
Иногда линкер может выдавать ошибки для исходного кода C, где определена встраиваемая (inline) функция. Ошибка выдается следующая:
Error[e46]: Undefined external … (от XLINK)
Error[Li005]: no definition for … (от ILINK)
Эту ошибку линкер выдает, потому что компилятор не может удовлетворить некоторым базовым условиям генерации кода (для inline-функций). Другими словами, проверьте следующие моменты, и соответственно внесите нужные исправления:
● Компилятор во время процесса компиляции должен быть в состоянии «увидеть» определение inline-функции.
● Если inline-функция используется в исключительно одном файле .c, то переместите определение в этот файл .c.
● Для использования inline-функции в нескольких файлах .c обеспечьте выполнение следующих пунктов:
1. Поместите определение функции в заголовочный файл .h.
// Должен быть заголовочный файл (например foo.h), который обычно
// может подключаться во многих C-файлах.
inline unsigned char foo(unsigned char c) { return (c+1); }
2. Подключите этот заголовочный файл во все файлы .c, где используется вызов этой inline-функции.
3. Убедитесь, что существует только один .c файл с предварительной декларацией этой inline-функции.
// Эта строка должна быть только в одном C-файле
// (например foo.c):
extern inline unsigned char foo(unsigned char c);
Пункты 1 и 2 очевидны, но причину необходимости пункта 3 понять сложнее. Из ISO-стандарта для языка C: ‘…An inline definition does not provide an external definition for the function…‘ (перевод: ‘…Определение inline не предоставляет внешнее определение функции…’). Таким образом, декларация extern (из пункта 3) используется (линкером) для разрешения любых (не встроенных) ссылок на эту функцию.
Существуют ограничения для исходного кода C, который содержит встраиваемые (inline) функции. Например, убедитесь, что inline-функция не ссылается ни на какие статические символы (ни на переменные, ни на функции).
Для дополнительной информации по встраиваемым функциям см. руководство по разработке [2] или справочное руководство компилятора [3].
[Ссылки]
1. Handling Undefined external message for inline function site:iar.com.
2. IAR C/C++ Development Guide site:iar.com.
3. IAR C/C++ Compiler User Guide site:iar.com.
Содержание
- Error e46 undefined external iar
- Handling ‘Undefined external’ message for inline function
- Technical Note 49981
- Introduction
- Discussion
- Conclusion
- Error e46 undefined external iar
- Кто сейчас на форуме
- Handling ‘Undefined external’ message for inline function
- Technical Note 49981
- Introduction
- Discussion
- Conclusion
Error e46 undefined external iar
Иногда линкер может выдавать ошибки для исходного кода C, где определена встраиваемая (inline) функция. Ошибка выдается следующая:
Error[e46]: Undefined external . (от XLINK)
Error[Li005]: no definition for . (от ILINK)
Эту ошибку линкер выдает, потому что компилятор не может удовлетворить некоторым базовым условиям генерации кода (для inline-функций). Другими словами, проверьте следующие моменты, и соответственно внесите нужные исправления:
● Компилятор во время процесса компиляции должен быть в состоянии «увидеть» определение inline-функции.
● Если inline-функция используется в исключительно одном файле .c, то переместите определение в этот файл .c.
● Для использования inline-функции в нескольких файлах .c обеспечьте выполнение следующих пунктов:
1. Поместите определение функции в заголовочный файл .h.
2. Подключите этот заголовочный файл во все файлы .c, где используется вызов этой inline-функции.
3. Убедитесь, что существует только один .c файл с предварительной декларацией этой inline-функции.
Пункты 1 и 2 очевидны, но причину необходимости пункта 3 понять сложнее. Из ISO-стандарта для языка C: ‘. An inline definition does not provide an external definition for the function. ‘ (перевод: ‘. Определение inline не предоставляет внешнее определение функции. ‘). Таким образом, декларация extern (из пункта 3) используется (линкером) для разрешения любых (не встроенных) ссылок на эту функцию.
Существуют ограничения для исходного кода C, который содержит встраиваемые (inline) функции. Например, убедитесь, что inline-функция не ссылается ни на какие статические символы (ни на переменные, ни на функции).
Для дополнительной информации по встраиваемым функциям см. руководство по разработке [2] или справочное руководство компилятора [3].
Источник
Handling ‘Undefined external’ message for inline function
Technical Note 49981
Introduction
Sometimes linker errors are issued for C source files with inlined functions. The error messages are:
- Error[e46]: Undefined external . (from XLINK)
- Error[Li005]: no definition for . (from ILINK)
This technical note discusses how to resolve this situation.
Discussion
The linker error is issued because the compiler cannot fulfill some basic conditions (for inlined functions). In other words, check the following points and change the C source accordingly:
- The compiler must at compile-time be able to ‘see’ the definition of the inlined function.
- If the inlined function is used in precisely one (1) .c file, move the definition to that .c file.
- To use an inlined function in several .c files:
-
- Put the function definition in a .h file.
- Include that .h file in all .c files where there is a call to the function.
- Make sure that there is precisely one (1) .c file with an extern declaration of the inlined function.
The reasons for P.1 and P.2 are straightforward. But the reason for P.3 can be harder to understand. From the ISO standard for C: ‘. An inline definition does not provide an external definition for the function. ‘ So the extern declaration (from P.3) is used (by the linker) to resolve any non-inlined references to the function.
Conclusion
There are constrains C source code that contains inlined functions. For example, make sure that the inlined function does not refer to any static symbols (neither variables nor functions).
For more information, see Inlining functions (in the Development Guide or in the Compiler Reference Guide).
All product names are trademarks or registered trademarks of their respective owners.
World leader of software and services for embedded systems development.
Источник
Error e46 undefined external iar
Здравствуйте уважаемы форумчане!
Для ускорения работы над проектом, в котором применяется графический ЖК, воспользовался готовой библиотекой u8glib. Библиотека написана для нескольких типов контроллеров ЖК и размещается на сайте google. Проект пишется на IAR v5.50. Библиотека присоединяется, включением «заголовочного» файла в текст программы (#include «src/u8g.h»). Так же, в настройках компилятора, указан путь к каталогу с файлами библиотеки u8g. При попытке компиляции, IAR выдаёт ошибку:
Building configuration: menu_avr_v1 — Debug
Updating build tree.
Linking
Error[e46]: Undefined external «u8g_font_6x10» referred in menu_avr_v1 ( c:experementyMenu_arv_v1DebugObjmenu_avr_v1.r90 )
Error[e46]: Undefined external «u8g_SetFont» referred in menu_avr_v1 ( c:experementyMenu_arv_v1DebugObjmenu_avr_v1.r90 )
Error[e46]: Undefined external «u8g_DrawStr» referred in menu_avr_v1 ( c:experementyMenu_arv_v1DebugObjmenu_avr_v1.r90 )
Error while running Linker
Total number of errors: 3
Total number of warnings: 0
Раньше никогда не пользовался дополнительными библиотеками, кроме стандартных, входящих в состав IAR. Предполагаю, что неправильно настроил линкёр, но что именно, не могу разобраться.
Кто, что может подсказать по данному вопросу.
Реклама |
ibiza11 | |||||||||||||||||||||||||||||||||||||||||||||
Карма: 21 |
|
Форум РадиоКот • Просмотр темы — Ошибка линкёра IAR при компиляции проекта
Сообщения без ответов | Активные темы
ПРЯМО СЕЙЧАС: |
Автор | Сообщение |
---|---|
|
Заголовок сообщения: Ошибка линкёра IAR при компиляции проекта Добавлено: Чт июн 04, 2015 08:04:01 |
Родился
Зарегистрирован: Чт июн 04, 2015 07:33:38 Рейтинг сообщения: 0
|
Здравствуйте уважаемы форумчане! Building configuration: menu_avr_v1 — Debug Total number of errors: 3 Раньше никогда не пользовался дополнительными библиотеками, кроме стандартных, входящих в состав IAR. Предполагаю, что неправильно настроил линкёр, но что именно, не могу разобраться. Кто, что может подсказать по данному вопросу. Заранее благодарен! |
Вернуться наверх |
Профиль
|
Реклама | |
|
|
ibiza11
|
Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта Добавлено: Пн июн 08, 2015 00:58:48 |
||
Карма: 21 Рейтинг сообщения: 0
|
Линкер понятным языком вам сообщает, что при линковке проекта не смог найти переменные «u8g_font_6x10», «u8g_SetFont», «u8g_DrawStr», объявленные как external. |
||
Вернуться наверх | |||
Реклама | |
|
|
Kif55
|
Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта Добавлено: Пн июн 08, 2015 05:59:20 |
Зарегистрирован: Чт июн 04, 2015 07:33:38 Рейтинг сообщения: 0
|
ibiza11 большое спасибо что не оставили моё сообщение без внимания! Первое, что я сделал, это взял пример (благо несколько примеров есть в комплекте с библиотекой) и откомпилировал его в AVRStudio 4. Всё прошло без ошибок и предупреждений, а дополнительных переменных заводить не потребовалось. Правда немного удивила (об этом узнал из форумов) необходимость *.с и *.h файлы из каталога библиотеки вручную (при помощи add files) присоединять к проекту. Казалось бы, достаточно указать «заголовочный» файл библиотеки, а в настройках путь к каталогу с «сишными» файлами. Попытка тот же проект откомпилировать в IAR, приводит к вышеописанному результату. Возникает ощущение, что секрет кроется как раз в особенности построения данной библиотеки. К сожалению мне не хватает глубины теоретических знаний в работе компиляторов. По этой причине и консультируюсь здесь, в надежде, что кто нибудь уже сталкивался с похожей ситуацией и нашёл решение. В любом случае, спасибо!!! Пошёл дальше читать теорию)) |
Вернуться наверх | |
Psych
|
Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта Добавлено: Пн июн 08, 2015 07:30:59 |
||
Карма: 6 Рейтинг сообщения: 0
|
Попробуйте закинуть .с и .h в папку с проектом. |
||
Вернуться наверх | |||
Реклама | |
|
Выгодные LED-драйверы для решения любых задач КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения. Подобрать LED-драйвер>> |
ibiza11
|
Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта Добавлено: Вт июн 09, 2015 06:38:23 |
||
Карма: 21 Рейтинг сообщения: 0
|
При использовании библиотек, предоставляемых в исходных кодах, исполняемые файлы (*.c, *.cpp) нужно всегда добавлять к проекту. в IAR делайте точно так же как в AVRStudio, через Add file… |
||
Вернуться наверх | |||
Реклама | |
|
|
Реклама | |
|
LIMF – источники питания High-End от MORNSUN со стандартным функционалом на DIN-рейку На склад Компэл поступили ИП MORNSUN (крепление на DIN-рейку) с выходной мощностью 240 и 480 Вт. Данные источники питания обладают 150% перегрузочной способностью, активной схемой коррекции коэффициента мощности (ККМ; PFC), наличием сухого контакта реле для контроля работоспособности (DC OK) и возможностью подстройки выходного напряжения. Источники питания выполнены в металлическом корпусе, ПП с компонентами покрыта лаком с двух сторон, что делает ее устойчивой к соляному туману и пыли. Изделия соответствуют требованиям ANSI/ISA 71.04-2013 G3 на устойчивость к коррозии, а также нормам ATEX для взрывоопасных зон. Подробнее>> |
Кто сейчас на форуме |
Сейчас этот форум просматривают: Majestic-12 [Bot], son313, veso74 и гости: 6 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Comments
When I tried to build the project in IAR Embedded Workbench IDE for MSP430 Version 5.40.7 I get the following two linker errors:
Error[e46]: Undefined external «SetFirstContact» referred in Wrapper ( E:MT projectP00155_EU_PROJECTMetaWatch_firmwareMetaWatchVersion3160StackApiIARStack.r43 )
Error[e46]: Undefined external «ClearFirstContact» referred in Wrapper ( E:MT projectP00155_EU_PROJECTMetaWatch_firmwareMetaWatchVersion3160StackApiIARStack.r43 )
I used this versions
(https://github.com/MetaWatchOpenProjects/MetaWatch-WDS11x/commit/e557c7ee246914ab8df50b1c6b3f2181bee71f80)
Just updated the wrapper library Stack.r43 for IAR build. Please try again.
It complied Thank you.
Not a big issue for me, more a thing to add
In the CCS version if you try to build it when the hardware configuration is set to Duo (Build Configureation ->Set Active->Duo) there is no Wrapper-duo.lib
error #10008-D: cannot find file «C:/Users/mt/Dropbox/MT
project/P00155_EU_PROJECT/MetaWatch_firmware/MetaWatchVersion3160/Watch/Proj
ectCCS/../../Stack/Api/CCS/Wrapper-duo.lib»
If I want to use the Bluetooth stack 2.1 for a digital watch under CCS which hardware configuration should I use?
Now the duo.lib is there.
If you want to use watch with iPhone 4s (BLE), you use BLE configuration.
If you want to connect with Android (BR/EDR), you use SPP configuration.
Hello,
I have the same problem:
I am trying to compile the solution: https://github.com/mariusGundersen/MetaWatch-WDS11x
Error[e46]: Undefined external «SetupMessageAndAllocateBuffer» referred in HCI ( C:Documents and SettingsAdministrateurBureaumetawatchMetaWatch-Gen2-masterMetaWatch-Gen2-masterStackApiIARwrapper.r43 )
Error[e46]: Undefined external «EnableFlowControl» referred in MSP430FlashUtil ( C:Documents and SettingsAdministrateurBureaumetawatchMetaWatch-Gen2-masterMetaWatch-Gen2-masterWatchProjectGen2ObjMSP430FlashUtil.r43 )
Where I can find «Stack.r43» for IAR build in order to update it. the path in the project is clear «$PROJDIR$StackApiIAR»
you can review in project option—>output select library. and optimization select level high.