Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Warning[Lt009]: Inconsistent wchar_t size
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Integro
Всем привет, использую стороннюю библиотеку.
На этапе линковки возникает следующее предупреждение:
Код
Linking
Warning[Lt009]: Inconsistent wchar_t size
          D:\Projects\project_xxx Configuration\Obj\logic.o and 157 other objects have wchar_t size 16 bits
          lib_src_file.o(external_lib.a) and 6 other objects have wchar_t size 32 bits


Проект собирается без проблем но меня смущает данное сообщение. Я так понимаю что библа собрана с 32битным wchar_t, для решения проблемы решил переопределить в проекте wchar_t .

Пытался использовать преинклюд для всего проекта со следующем содержанием:
Код
#ifndef _WCHART
  #define _WCHART
  typedef long wchar_t;
#endif /* _WCHART */


После, результат выполнения sizeof(wchar_t) равен 4, но данное предупреждение осталось.

Версия IAR

Код
IAR Embedded Workbench for ARM              7.10.3.6932
IAR Embedded Workbench common components    7.0.3.3119


Что можно еще предпринять для устранения данного предупреждения?

Р.S. Пересобрать либу для типового 2ух байтного wchar_t не решение.
Сергей Борщ
Найти и правильно указать ключ компилятора, отвечающий за размер wchar_t. Переопределение стандартный типов руками еще никогда ни к чему хорошему не приводило.
Integro
Цитата(Сергей Борщ @ Sep 3 2014, 14:39) *
Найти и правильно указать ключ компилятора, отвечающий за размер wchar_t. Переопределение стандартный типов руками еще никогда ни к чему хорошему не приводило.

Да так в первую очередь и сделал, но для IAR`овского компилятора не смог найти ключа на подобие "--wchar32", как например здесь.
Или есть какой-то общий параметр для переопределения типа?
Сергей Борщ
Нет, общего нет. Придется вам внимательно перечитать документацию. Возможно этот ключ называется иначе. У меня нет ИАРа, поэтому я не могу сделать это за вас.
Integro
Цитата(Сергей Борщ @ Sep 4 2014, 10:14) *
Нет, общего нет. Придется вам внимательно перечитать документацию. Возможно этот ключ называется иначе. У меня нет ИАРа, поэтому я не могу сделать это за вас.

Спасибо Сергей, но не надо замени ничего делать, мне просто нужны идеи или опыт тех кто как-то с этим справился.
Пришел ответ поддержки IAR, на вопрос могу ли я изменить размер wchar_t получил ответ:
Код
I'm afraid not, this is one of the problems with EABI : the sizes of enum and wchar_t are not consistent.
There is a little trick you can do to force the compiler/linker to essentially pad the wchar_t as follows

__root union{
  int _i;
  wchar_t i;
};


Данный способ тоже не прокатывает.

Есть еще идеи?
Как вообще линкер узнает о размере wchar_t, Я о том размере что в либе?
Сергей Борщ
Ответ ставит в тупик. А что за библиотека, кто ее собирал? Мне и в голову не приходило, что ее могли собирать другим компилятором. Я думал, что собирали таким же, но с неизвестным набором ключей...

Информация о типах, вероятно, является частью EABI, а у меня знаний в этой области, увы, нет. А вы вообще используете wchar_t в своей программе? В крайнем случае можно задавить это предупреждение, но это как-то совсем некрасиво.

Я правильно понимаю, что вы используете C++?
Integro
Цитата(Сергей Борщ @ Sep 4 2014, 14:12) *
Я думал, что собирали таким же, но с неизвестным набором ключей...

Либы не мои, вероятно собирали чем-то другим.

Цитата(Сергей Борщ @ Sep 4 2014, 14:12) *
А вы вообще используете wchar_t в своей программе? В крайнем случае можно задавить это предупреждение, но это как-то совсем некрасиво.

Согласен, но наверное придется так и сделать)

Цитата(Сергей Борщ @ Sep 4 2014, 14:12) *
Я правильно понимаю, что вы используете C++?

Нет, в параметрах проекта выставлен ANSI C, C99.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.