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

 
 
 
Reply to this topicStart new topic
> Портирование библиотеки 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
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
Слёзкин
сообщение Nov 1 2011, 08:24
Сообщение #4


Участник
*

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



А может быть, кто-то имеет достаточный опыт, чтобы ответить на вопрос, или высказать соображения: возможно ли вообще использовать библиотеку, скомпилированную в IAR для проекта, компилируемого GCC?
Или, быть может, по каким-то причинам, это заведомо невозможно?

Сообщение отредактировал Слёзкин - Nov 1 2011, 08:26
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 1 2011, 09:14
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Может было бы и возможно если оба компилятора удовлетворяли одному abi-eabi.
Мне думается, что вряд-ли это так...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
RCray
сообщение Nov 18 2011, 06:04
Сообщение #6


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

Группа: Свой
Сообщений: 170
Регистрация: 14-09-05
Из: Suwon
Пользователь №: 8 548



Цитата(demiurg_spb @ Nov 1 2011, 13:14) *
Может было бы и возможно если оба компилятора удовлетворяли одному abi-eabi.
Мне думается, что вряд-ли это так...


EABI в данном случае относится к архитектуре процессора?
Тогда компиляторы последней версии по идее должны поддерживать этот EABI. Что равно возможности использования объектного кода в смешанных проектах.
Я не исключаю наличия единичных случаев, в которых нужен дифференциальный подход.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 18 2011, 15:30
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(RCray @ Nov 18 2011, 09:04) *
EABI в данном случае относится к архитектуре процессора?
Тогда компиляторы последней версии по идее должны поддерживать этот EABI.
Моё мнение, что компиляторы не особо что-то кому-то должны. Они просто соответствую и говорят об этом либо нет, что тоже вполне возможно.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


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


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