Error e46 undefined external iar

Updated:

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.

Содержание

  1. Error e46 undefined external iar
  2. Handling ‘Undefined external’ message for inline function
  3. Technical Note 49981
  4. Introduction
  5. Discussion
  6. Conclusion
  7. Error e46 undefined external iar
  8. Кто сейчас на форуме
  9. Handling ‘Undefined external’ message for inline function
  10. Technical Note 49981
  11. Introduction
  12. Discussion
  13. 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:
    1. Put the function definition in a .h file.
    2. Include that .h file in all .c files where there is a call to the function.
    3. 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
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1899
Откуда: Москва
Рейтинг сообщения: 0

Реклама

Kif55

Зарегистрирован: Чт июн 04, 2015 07:33:38
Сообщений: 2
Рейтинг сообщения: 0

ibiza11 большое спасибо что не оставили моё сообщение без внимания!

Первое, что я сделал, это взял пример (благо несколько примеров есть в комплекте с библиотекой) и откомпилировал его в AVRStudio 4. Всё прошло без ошибок и предупреждений, а дополнительных переменных заводить не потребовалось. Правда немного удивила (об этом узнал из форумов) необходимость *.с и *.h файлы из каталога библиотеки вручную (при помощи add files) присоединять к проекту. Казалось бы, достаточно указать «заголовочный» файл библиотеки, а в настройках путь к каталогу с «сишными» файлами.

Попытка тот же проект откомпилировать в IAR, приводит к вышеописанному результату. Возникает ощущение, что секрет кроется как раз в особенности построения данной библиотеки. К сожалению мне не хватает глубины теоретических знаний в работе компиляторов. По этой причине и консультируюсь здесь, в надежде, что кто нибудь уже сталкивался с похожей ситуацией и нашёл решение.

В любом случае, спасибо.

Пошёл дальше читать теорию))

Реклама

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Psych
Опытный кот

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа
Рейтинг сообщения: 0

Реклама

Линейка изолированных DC/DC-преобразователей VCB и VCF с диапазоном мощности 3…400 Вт предназначена для использования в телекоммуникационной аппаратуре. Эти новые преобразователи третьего поколения (R3) выпускаются в типоразмерах SIP, 1/4 Brick, 1/8 Brick и 1/16 Brick. Данные DC/DC отвечают требованиям стандарта DOSA, имеют диапазон входного напряжения 2:1 (36…75 В), обладают высокой эффективностью (КПД до 93%) и широким температурным диапазоном -40…85ºС. Изоляция «вход-выход» составляет 1500/2250 В. VCB и VCF выпускаются в двух вариантах по логике управления: N (отрицательной) и P (положительной).

ibiza11
Мудрый кот

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1899
Откуда: Москва
Рейтинг сообщения: 0

Реклама
Реклама

В промышленных устройствах и установках с электроприводом на двигателях постоянного тока в момент пуска требуется обеспечить повышенный ток. Для решения этой задачи MEAN WELL предлагает вместо ИП с повышенной избыточной мощностью, более оптимальное решение — источник питания с необходимой перегрузочной способностью семейства HRP/N3. Новое семейство, представленное в Компэл, экономичнее и расширяет уже существующее HRP/N в увеличении кратности перегрузки.

Часовой пояс: UTC + 3 часа

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Источник

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:
    1. Put the function definition in a .h file.
    2. Include that .h file in all .c files where there is a call to the function.
    3. 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 in software tools and services for embedded systems development.

Источник

Adblock
detector

Форум РадиоКот • Просмотр темы — Ошибка линкёра IAR при компиляции проекта

Сообщения без ответов | Активные темы

ПРЯМО СЕЙЧАС:

Автор Сообщение

Не в сети

Заголовок сообщения: Ошибка линкёра IAR при компиляции проекта

СообщениеДобавлено: Чт июн 04, 2015 08:04:01 

Родился

Зарегистрирован: Чт июн 04, 2015 07:33:38
Сообщений: 2

Рейтинг сообщения: 0

Здравствуйте уважаемы форумчане!
Для ускорения работы над проектом, в котором применяется графический ЖК, воспользовался готовой библиотекой 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

Не в сети

Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта

СообщениеДобавлено: Пн июн 08, 2015 00:58:48 

Мудрый кот
Аватар пользователя

Карма: 21

Рейтинг сообщений: 143

Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1899
Откуда: Москва

Рейтинг сообщения: 0

Линкер понятным языком вам сообщает, что при линковке проекта не смог найти переменные «u8g_font_6x10», «u8g_SetFont», «u8g_DrawStr», объявленные как external.
Код библиотеки я не смотрел, но думаю библиотека написана таким образом, что предполагается, что программист сам ручками создаст эти переменные. Изучите примеры использования этой библиотеки и напишите свой код в соответствии с этими примерами.


_________________
Ставим плюсы: )

Вернуться наверх
Реклама

Kif55

Не в сети

Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта

СообщениеДобавлено: Пн июн 08, 2015 05:59:20 

Зарегистрирован: Чт июн 04, 2015 07:33:38
Сообщений: 2

Рейтинг сообщения: 0

ibiza11 большое спасибо что не оставили моё сообщение без внимания!

Первое, что я сделал, это взял пример (благо несколько примеров есть в комплекте с библиотекой) и откомпилировал его в AVRStudio 4. Всё прошло без ошибок и предупреждений, а дополнительных переменных заводить не потребовалось. Правда немного удивила (об этом узнал из форумов) необходимость *.с и *.h файлы из каталога библиотеки вручную (при помощи add files) присоединять к проекту. Казалось бы, достаточно указать «заголовочный» файл библиотеки, а в настройках путь к каталогу с «сишными» файлами.

Попытка тот же проект откомпилировать в IAR, приводит к вышеописанному результату. Возникает ощущение, что секрет кроется как раз в особенности построения данной библиотеки. К сожалению мне не хватает глубины теоретических знаний в работе компиляторов. По этой причине и консультируюсь здесь, в надежде, что кто нибудь уже сталкивался с похожей ситуацией и нашёл решение.

В любом случае, спасибо!!!

Пошёл дальше читать теорию))

Вернуться наверх

Psych

Не в сети

Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта

СообщениеДобавлено: Пн июн 08, 2015 07:30:59 

Опытный кот
Аватар пользователя

Карма: 6

Рейтинг сообщений: 33

Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 834
Откуда: Уфа

Рейтинг сообщения: 0

Попробуйте закинуть .с и .h в папку с проектом.

Вернуться наверх
Реклама

Выгодные LED-драйверы для решения любых задач

КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения.

Подобрать LED-драйвер>>

ibiza11

Не в сети

Заголовок сообщения: Re: Ошибка линкёра IAR при компиляции проекта

СообщениеДобавлено: Вт июн 09, 2015 06:38:23 

Мудрый кот
Аватар пользователя

Карма: 21

Рейтинг сообщений: 143

Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1899
Откуда: Москва

Рейтинг сообщения: 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

@MartinDetech

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)

@myang

Just updated the wrapper library Stack.r43 for IAR build. Please try again.

@MartinDetech

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?

@myang

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.

@cfdruta

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»

@tranxuantrung

you can review in project option—>output select library. and optimization select level high.

Понравилась статья? Поделить с друзьями:
  • Error e161 403e
  • Error e019 street cannot intersect with itself split this element
  • Error e011 духовка siemens
  • Error e01 epson
  • Error e0046 processing failed no calibrated cameras