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

 
 
> Портирование библиотеки IAR -> GCC, Проблема с определением типа wchar_t
Слёзкин
сообщение Oct 26 2011, 06:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 26-10-11
Пользователь №: 67 951



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

Обращаюсь с просьбой посодействовать по следующему вопросу.
Существует файл статической библиотеки <filename.a> и header-файл <filename.h>, где объявлены типы и функции.
Исходный код библиотеки разработчик предпочел скрыть и предоставил .a -файл, скомпилированый в IAR.

Моя же задача - правильно сцепить данную библиотеку с моим проектом, компилируемым с помощью GCC. Однако, линковщик предупреждает о возможных ошибках в работе программы из-за несовместимости типов wchar_t. Мне удалось выяснить что в среде Windows этот символьный тип имеет размер в 2 байта, а в Linux - целых 4.

Возникло два вопроса.

1) Нужно ли обращать внимание на этот warning? Ведь размер wchar_t в стандартных библиотеках компилятора GCC больше, чем в рассматриваемой. И в первом приближении кажется, что потери данных произойти не может (исключая случай с переполнением возвращаемых в код библиотеки переменных).

2) Если ответ на первый вопрос - нужно. В подпрограмме ReadELF можно просматривать имена функций библиотеки. А можно ли каким-нибудь образом узнать типы входных и выходных параметров этих функций? Ведь линковщик как-то понимает, что это ни что иное, как wchar_t!

Большое спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aaron
сообщение Oct 27 2011, 09:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



дак если есть <filename.h>, там же имена и параметры передаваемые/возвращаемые указаны. насчёт 2/4 байта - результаты могут быть плачевные, если в функциях идёт дополнительное преобразование типов.
Go to the top of the page
 
+Quote Post
Слёзкин
сообщение Oct 27 2011, 11:16
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 26-10-11
Пользователь №: 67 951



Цитата(Aaron @ Oct 27 2011, 13:12) *
дак если есть <filename.h>, там же имена и параметры передаваемые/возвращаемые указаны. насчёт 2/4 байта - результаты могут быть плачевные, если в функциях идёт дополнительное преобразование типов.


В .h объявлены (увы) только пользовательские функции... Среди них ни одна не равна и не имеет в качестве аргумента wchar_t...

Да.
Если допустить, что четырехбайтный wchar_t это unsigned long int, а двухбайтный- unsigned int, то мой вопрос можно записать так:

Код
unsigned long A;
unsigned B;
B=0x1234;
A=B; // Чему будет равно A? 0x00001234 или 0x????1234
A=0x12345678;
B=A; // Ну здесь наверное B=0x5678? Тоже ведь не факт


p.s. Про такое, как флаг -fshort wchar и макрос __WCHAR_MAX__ я читал, но задействие сих может окончится печально при работе других стандартных библиотек...


Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 01:59
Рейтинг@Mail.ru


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