реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Warning[Lt009]: Inconsistent wchar_t size, Не могу победить предупреждения линкера
Integro
сообщение Sep 3 2014, 09:57
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Всем привет, использую стороннюю библиотеку.
На этапе линковки возникает следующее предупреждение:
Код
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 не решение.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 3 2014, 11:39
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Найти и правильно указать ключ компилятора, отвечающий за размер wchar_t. Переопределение стандартный типов руками еще никогда ни к чему хорошему не приводило.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Integro
сообщение Sep 4 2014, 06:40
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



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

Да так в первую очередь и сделал, но для IAR`овского компилятора не смог найти ключа на подобие "--wchar32", как например здесь.
Или есть какой-то общий параметр для переопределения типа?

Сообщение отредактировал Integro - Sep 4 2014, 06:42
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 4 2014, 07:14
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Нет, общего нет. Придется вам внимательно перечитать документацию. Возможно этот ключ называется иначе. У меня нет ИАРа, поэтому я не могу сделать это за вас.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Integro
сообщение Sep 4 2014, 10:25
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Цитата(Сергей Борщ @ 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, Я о том размере что в либе?

Сообщение отредактировал Integro - Sep 4 2014, 10:27
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 4 2014, 11:12
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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

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

Я правильно понимаю, что вы используете C++?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Integro
сообщение Sep 4 2014, 12:37
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



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

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

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

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

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

Нет, в параметрах проекта выставлен ANSI C, C99.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.02021 секунд с 7
ELECTRONIX ©2004-2016