Официальный форум СВД Встраиваемые Системы
06 Февраля, 2012, 11:22:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: OpenWatcom: библиотеки для QNX4  (Прочитано 2198 раз)
Олег Большаков
Администратор
Старожил

Сообщений: 2110


Читаю...


WWW
« : 09 Марта, 2010, 02:17:24 »

Дополнительные библиотеки QNX4 при работе с OpenWatcom

Библиотека owc

При активной работе с OpenWatcom, рано или поздно, разработчик сталкивается с ошибками при сборке (линковке) программы, примерно следующего вида:

Код:
Error! E2028: __I8M is an undefined reference
Error! E2028: __I8RS is an undefined reference
Error! E2028: __I8LS is an undefined reference
Error! E2028: __I8D is an undefined reference

Это функции умножения, деления и сдвига, вызов которых вставляет компилятор, в надежде на то, что они (функции) будут обнаружены при линковке в clib. Однако, в clib из QNX4 таких функций нет. Решением этой проблемы может быть сборка библиотеки с недостающими функциями. Назовём такую библиотеку owc.

Если при сборке приложений с помощью OpenWatcom, возникают указанные выше ошибки, то необходимо добавить опцию -l owc линковщику. Можно добавить функции библиотеки owc в clib от QNX4, например, так:

Код:
$ wlib -q -b -c clib3r.lib owc3r.lib

После этого не нужно будет заботиться о добавлении опции -l owc. Smiley

Изменения в библиотеке math

При работе над сборкой библиотеки xml2 для QNX4 при помощи OpenWatcom, я столкнулся с необходимостью использовать библиотеку math из OpenWatcom. Точнее мне понадобились некоторые функции из нового заголовочного файла math.h. Просто так заменить библиотеку math не получится, т.к. некоторые функции типа _FtoS, __Nan_Inf и т.д. отсутствуют в новой библиотеке. К счастью, эти функции есть в исходном коде OpenWatcom, так что решением проблемы может быть включение указанных функций в новую библиотеку.

Сборка библиотек

Для сборки библиотек на базе OpenWatcom 1.8.0 был подготовлен Makefile. Всё что нужно, это скачать файл, изменить значения переменных WATCOM_SRC и WATCOM_BIN, которые должны указывать соответственно на каталоги с исходным кодом и собранным OpenWatcom. После этого набираем make и получаем две библиотеки: owc3r.lib и math387r.lib. Копируем эти библиотеки туда, где их может найти утилита cc для OpenWatcom (math387r.lib поверх старой), копируем math.h из каталога h бинарной версии OpenWatcom поверх старого math.h из QNX4. Теперь можно попробовать что-нибудь собрать. Wink

Замечания и дополнения приветствуются. Скачать Makefile для сборки библиотек могут только зарегистрированные пользователи.

<-->
« Последнее редактирование: 15 Ноября, 2010, 20:48:41 от Олег Большаков » Записан

Пономаренко Андрей
Интересующийся

Сообщений: 7


« Ответ #1 : 24 Октября, 2010, 17:32:36 »

Здравствуйте!
Попытался собрать библиотеки - не получилось.
В Вашем Makefile указано CC = wacc. wacc -это что? Ни где не нашел его.
Не совсем понятно из описания в какой ОС производить сборку.
Нельзя ли провести небольшой ликбез?
И нельзя ли поподробнее о том как можно собрать библиотеку OWC (OWC.cpp + Makefile) ?
Я пробовал создавать подобную библиотеку, однако при линковке функции все-равно не находятся. Может я что то не так делаю.
Заранее спасибо.
« Последнее редактирование: 24 Октября, 2010, 17:39:44 от Пономаренко Андрей » Записан
Олег Большаков
Администратор
Старожил

Сообщений: 2110


Читаю...


WWW
« Ответ #2 : 25 Октября, 2010, 23:14:07 »

Постараюсь ответить на Ваши вопросы. Утилита wacc это немного доработанная утилита cc (или cc.bat для Windows) из архива ow_q4_linux_20081229.tar.gz (или ow_q4_win_20081224.zip). Добавил ссылку на скачивание в первое сообщение. Я собирал библиотеки в Linux. Думаю, что не должно быть проблем при сборке в Windows, только надо подправить пути. Более подробно о настройке OpenWatcom.

Для сборки библиотек owc3r.lib и math387r.lib требуются только исходники самого OpenWatcom (я использовал версию 1.8). надо скорректировать пути к исходным кодам в Makefile . Других тонкостей тут нет.

Если у Вас будут какие-то ошибки при кросс-компиляции OpenWatcom под QNX4, то задавайте вопросы на форуме -- постараемся ответить.
Записан

Пономаренко Андрей
Интересующийся

Сообщений: 7


« Ответ #3 : 26 Октября, 2010, 09:41:45 »

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

Спасибо за подсказку. Библиотеки math и owc собрались, сборка тестовой задачки прошла без замечаний.
Но осталась проблема:

   float Test = 0.12345;
   cout << "Test = " << Test << "\n"; <- Отображает на экране все правильно.
   printf("Test = %f\n",Test);   <- в этом случае на экране случайные символы
   printf("Test = %5.1f\n",Test);   <- в этом случае SIGSEGV

Дело в том, что меня интересует как раз вывод величин с заранее определенным количеством знаков после запятой.

OpenWatcom подготовлен в полном соответствии с Вашим описанием.

Можете что-нибудь посоветовать? Уж очень заманчива возможность сборки приложений под Windows.
Конечно использование для этих целей связки Eclipse (в качестве редактора) и виртуальной машины тоже вполне неплохо: редактируем в Windows в Eclipse, затем по ftp копируем на вирт. машину, там же компиллируем, там же запускаем.

И еще одно: Ваш cc.bat отказывается собирать библиотеки *.lib говорит, что No compiler available for *.lib.
Пришлось вручную в Makefile указать вместо cc wlib. Правда я проделывал это только под Windows.
Записан
Михаил Колесов
Опытный пользователь

Сообщений: 125



WWW
« Ответ #4 : 26 Октября, 2010, 13:33:07 »

Попробуйте в вашем тесте заменить float на double.
Записан

Пономаренко Андрей
Интересующийся

Сообщений: 7


« Ответ #5 : 27 Октября, 2010, 07:07:17 »

Совет напомнил мне:
- Что-то машина не заводится...
- А ты фары протирал? 
Smiley
Но все-таки для надежности проверил.
Результат тот-же.
Записан
Пономаренко Андрей
Интересующийся

Сообщений: 7


« Ответ #6 : 27 Октября, 2010, 12:09:13 »

Подскажите пожалуйста, что я еще могу попробовать сделать?
Или, быть может, вышлите мне, если не трудно, Вашу измененную math.lib. Видимо в ней все дело.
Записан
Олег Большаков
Администратор
Старожил

Сообщений: 2110


Читаю...


WWW
« Ответ #7 : 27 Октября, 2010, 12:34:24 »

Ваш пример кода у меня собирается и работает. Только я переделал его из Си++ на Си. Скажите, чем вызвано использование именно Си++? Работа OpenWatcom C++ для QNX4 тестировалась меньше всего и скорее всего могут проявляться проблемы.

Библиотеку прицепляю к этому сообщению.

И еще одно: Ваш cc.bat отказывается собирать библиотеки *.lib говорит, что No compiler available for *.lib.
Пришлось вручную в Makefile указать вместо cc wlib. Правда я проделывал это только под Windows.

Видимо, Вы используете старую версию cc.bat, которая не поддерживает ключи -A и -a. Попробуйте более новую (файл wacc), только для Windows Вам надо будет переделать заголовок файла (посмотрите как это сделано в cc.bat), у меня, к сожалению, нет Windows, чтобы переделать и проверить.
Записан

Пономаренко Андрей
Интересующийся

Сообщений: 7


« Ответ #8 : 28 Октября, 2010, 20:27:56 »

Спасибо за библиотеку.
Программа заработала самым неожиданным образом - убрал из Makefile принудительную прилинковку math387r. При этом math387r лежит собственной сборки.
На счет C++ - просто мне в наследство досталось огромное количество чужих программ, написанных именно таким образом: классы, наследование и прочие прелести плюсов. Так что ни чего не поделать.

Еще немного хочу поделиться опытом разработки в OpenWatcom под Windows.
Я с Вашего (или без оного) позволения слегка отредактировал файлик cc.bat:
во-первых сделал автоматическое переименование *.obj в *.o - это очень полезно поскольку зачастую в Makefile указывается "MyFile.o: ..." т.е. собирается объектный файл, который затем с чем-нибудь линкуется. Однако в Вашем файле cc.bat указано, что для Windows объектный файл имеет расширение obj. Соответственно при линковке, встретив файл с расширением *.o cc.bat выдает сообщение о невозможности что-либо предпринять с указанным файлом. Можно, конечно, в Makefile все .o переименовать в .obj и все заработает, однако при этом теряется приемственность с QNX.
Во-вторых указал, что расширением объектного файла под Windows является .o по уже описанным причинам.
В-третьих сделал автоматическое переименование готового исполняемого файла MyExeFile.qnx просто в MyExeFile. Просто крайне неудобно это *.qnx.
После проделанных изменений компиляция одного и того же проекта проходит как под Windows, так и под QNX без внесения каких-либо изменений.
Записан
Олег Большаков
Администратор
Старожил

Сообщений: 2110


Читаю...


WWW
« Ответ #9 : 15 Ноября, 2010, 20:49:42 »

Внёс изменения в Makefile, ссылка в первом сообщении.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2011 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 22 Января, 2012, 12:30:28