QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 11:46
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Языки и алгоритмы —› GCC 4.x в QNX

. 1 . 2 . >>

Посл.ответ Сообщение


Дата: 21 Май,  01:45

Olej на Харьковский губернский портале задал мне вопрос:
А расскажите подробнее - это не имеет прямого касательства к Ada - как вы устанавливаете/используете gcc 4.x в QNX?
наряду-одноврменно с gcc 2.95.2 & 3.3.5 - которые там и так присутствуют? не мешают они друг другу?
Я думаю что это будет интересно многим и поэтому решил ответ поместит одновременно
на qnx.org.ru.
Я в QNX использую gcc 4.1.x & 4.2.x & 4.3.x одноврменно с gcc 2.95.2 & 3.3.5 и они не мешают друг другу.
Все эти компиляторы так как и практически другое программное обеспечение
я ставлю в /usr/local/bin, /usr/local/lib, ...
Каждая программа системы GCC имееть окончание с номером версии.
И так для GCC 4.2.0 имеем gcc4.2.0, cpp4.2.0, gfortran4.2.0, gnat4.2.0, ....
а для GCC 4.1.3 соотственно gcc4.1.3, cpp4.1.3, gfortran4.1.3, gnat4.1.3, ....
И эти все файли находяться в /usr/local/bin. Одновременно в том же каталоге находяться
символьные линки: gcc -> gcc4.2.0, cpp -> cpp4.2.0, gforttran -> gfortran4.2.0, gnat -> gnat4.2.0, .....
Естесьтвенно, что когда я хочу использовать версию 4.1.3 то меняю все линки в /usr/local/bin
и /usr/local/lib. Там тоже такойже механизм.
# ls -l /usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/
total 56
drwxrwxr-x 7 root root 4096 May 18 09:09 .
drwxrwxr-x 3 root root 4096 Nov 28 2004 ..
drwxrwxr-x 6 root root 4096 Sep 17 2006 3.4.6
drwxrwxr-x 6 root root 4096 Feb 14 23:03 4.1.2
drwxrwxr-x 6 root root 4096 May 13 13:07 4.1.3
drwxrwxr-x 7 root root 4096 May 18 08:41 4.2.0
drwxrwxr-x 8 root root 4096 Apr 17 00:35 4.3.0
#
# ls -l /usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.2.0
total 28364
drwxrwxr-x 7 root root 4096 May 18 08:41 .
drwxrwxr-x 7 root root 4096 May 18 09:09 ..
drwxrwxr-x 2 root root 66048 May 18 08:39 adainclude
drwxrwxr-x 2 root root 36352 May 18 08:59 adalib
-rw-r--r-- 1 root root 2004 May 18 08:39 crtbegin.o
drwxrwxr-x 2 root root 4096 May 18 08:39 finclude
drwxrwxr-x 4 root root 4096 May 18 08:41 include
drwxrwxr-x 3 root root 4096 May 18 08:39 install-tools
-rw-r--r-- 1 root root 2449310 May 18 08:39 libgcc.a
-rw-r--r-- 1 root root 475856 May 18 08:39 libgcov.a
-rw-r--r-- 1 root root 8568508 May 18 08:41 libgfortran.a
-rwxr-xr-x 1 root root 798 May 18 08:40 libgfortran.la
lrwxrwxrwx 1 root root 20 May 18 09:09 libgfortran.so -> libgfortran.so.2.0.0
lrwxrwxrwx 1 root root 20 May 18 09:09 libgfortran.so.2 -> libgfortran.so.2.0.0
-rwxr-xr-x 1 root root 1785476 May 18 08:40 libgfortran.so.2.0.0
-rw-r--r-- 1 root root 15134 May 18 08:40 libgfortranbegin.a
-rwxr-xr-x 1 root root 741 May 18 08:40 libgfortranbegin.la
-rw-r--r-- 1 root root 555174 May 18 08:41 libobjc.a
-rwxr-xr-x 1 root root 766 May 18 08:41 libobjc.la
lrwxrwxrwx 1 root root 16 May 18 09:10 libobjc.so -> libobjc.so.2.0.0
lrwxrwxrwx 1 root root 16 May 18 09:10 libobjc.so.2 -> libobjc.so.2.0.0
-rwxr-xr-x 1 root root 406652 May 18 08:41 libobjc.so.2.0.0
-rw-r--r-- 1 root root 95510 May 18 08:40 libssp.a
-rwxr-xr-x 1 root root 759 May 18 08:40 libssp.la
lrwxrwxrwx 1 root root 15 May 18 09:09 libssp.so -> libssp.so.0.0.0
lrwxrwxrwx 1 root root 15 May 18 09:09 libssp.so.0 -> libssp.so.0.0.0
-rwxr-xr-x 1 root root 32669 May 18 08:40 libssp.so.0.0.0
-rw-r--r-- 1 root root 2462 May 18 08:40 libssp_nonshared.a
-rwxr-xr-x 1 root root 741 May 18 08:40 libssp_nonshared.la
#
# ls -l libexec/gcc/i386-pc-nto-qnx6.3.0/4.2.0/
total 41507
drwxrwxr-x 3 root root 4096 May 18 09:05 .
drwxrwxr-x 3 root root 4096 May 18 08:35 ..
-rwxr-xr-x 1 root root 4645032 May 18 09:05 cc1
-rwxr-xr-x 1 root root 4699560 May 18 09:05 cc1obj
-rwxr-xr-x 1 root root 109236 May 18 09:05 collect2
-rwxr-xr-x 1 root root 4816540 May 18 09:05 f951
-rwxr-xr-x 1 root root 6967308 May 18 09:05 gnat1
drwxrwxr-x 2 root root 4096 May 18 08:35 install-tools
#
Чтобы быстро менять компилятор я создал для каждой версси каталог в котором собрал все линки
для /usr/local/bin и /usr/local/lib и просто копилирую.
К примеру для 4.2.0 имею каталог в /src:
# pwd
/src/gnat.4.2.0/usr/local
# ls -l
total 32
drwxrwxr-x 4 root root 4096 May 15 2005 .
drwxrwxr-x 3 root root 4096 Mar 06 2005 ..
drwxrwxr-x 2 root root 4096 Apr 25 01:08 bin
drwxrwxr-x 2 root root 4096 Apr 25 01:08 lib
# ls -l bin
total 37
drwxrwxr-x 2 root root 4096 Apr 25 01:08 .
drwxrwxr-x 4 root root 4096 May 15 2005 ..
lrwxrwxrwx 1 root root 8 Nov 18 2006 cpp -> cpp4.2.0
lrwxrwxrwx 1 root root 8 Nov 18 2006 gcc -> gcc4.2.0
lrwxrwxrwx 1 root root 11 Nov 18 2006 gccbug -> gccbug4.2.0
lrwxrwxrwx 1 root root 9 Nov 18 2006 gcov -> gcov4.2.0
lrwxrwxrwx 1 root root 13 Apr 25 01:08 gfortran -> gfortran4.2.0
lrwxrwxrwx 1 root root 9 Nov 18 2006 gnat -> gnat4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatbind -> gnatbind4.2.0
lrwxrwxrwx 1 root root 11 Nov 18 2006 gnatbl -> gnatbl4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatchop -> gnatchop4.2.0
lrwxrwxrwx 1 root root 14 Nov 18 2006 gnatclean -> gnatclean4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatfind -> gnatfind4.2.0
lrwxrwxrwx 1 root root 11 Nov 18 2006 gnatkr -> gnatkr4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatlink -> gnatlink4.2.0
lrwxrwxrwx 1 root root 11 Nov 18 2006 gnatls -> gnatls4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatmake -> gnatmake4.2.0
lrwxrwxrwx 1 root root 12 Nov 18 2006 gnatmem -> gnatmem4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatname -> gnatname4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatprep -> gnatprep4.2.0
lrwxrwxrwx 1 root root 13 Nov 18 2006 gnatxref -> gnatxref4.2.0
lrwxrwxrwx 1 root root 12 Nov 18 2006 gprmake -> gprmake4.2.0
# ls -l lib
total 26
drwxrwxr-x 2 root root 4096 Apr 25 01:08 .
drwxrwxr-x 4 root root 4096 May 15 2005 ..
lrwxrwxrwx 1 root root 47 Apr 25 01:08 libgfortran.so -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/libgfortran.so.2
lrwxrwxrwx 1 root root 51 Apr 25 01:08 libgfortran.so.2 -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/libgfortran.so.2.0.0
lrwxrwxrwx 1 root root 52 Nov 08 2006 libgmem.a -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/adalib/libgmem4.2.0.a
lrwxrwxrwx 1 root root 53 Nov 08 2006 libgnarl-4.2.so -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/adalib/libgnarl-4.2.so
lrwxrwxrwx 1 root root 48 Nov 08 2006 libgnarl.a -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/adalib/libgnarl.a
lrwxrwxrwx 1 root root 52 Nov 08 2006 libgnat-4.2.so -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/adalib/libgnat-4.2.so
lrwxrwxrwx 1 root root 47 Nov 08 2006 libgnat.a -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/adalib/libgnat.a
lrwxrwxrwx 1 root root 16 Nov 08 2006 libiberty.a -> libiberty4.2.0.a
lrwxrwxrwx 1 root root 47 Apr 25 01:08 libobjc.so -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/libobjc.so.2.0.0
lrwxrwxrwx 1 root root 47 Apr 25 01:08 libobjc.so.2 -> gcc/i386-pc-nto-qnx6.3.0/4.2.0/libobjc.so.2.0.0
#
Соoтвественно для 4.1.3 имею каталог /src/gnat.4.1.3/usr/local и каталоги bin и lib в которых находяться
линки. Во всех компиляторах на http://www.ajam.org.pl/ находяться эти линки.
Если хотите использовать только одну версию компилятора тогда можно просто переписать содежимое
архва в соответсвующие каталоги:
/usr/local/bin
/usr/local/include
/usr/local/info
/usr/local/lib
/usr/local/libexec
/usr/local/man
/usr/local/share
Иначе стоить построит отделные каталоги.
Очень важно чтобы в PATH /usr/local/bin находилось перед /usr/qnx630/host/qnx6/x86/*
тогда gcc это тот каторый действительно находиться в /usr/local/*
У меня это выглядить так:
# echo $LD_LIBRARY_PATH
/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib:/usr/photon/lib:/usr/photon/dll:/usr/local/lib:/opt/X11R6/lib:
/usr/X11R6/lib:/opt/qt4/lib
# echo $PATH
/sbin:/usr/sbin:
/bin:/usr/bin:
/usr/photon/bin:
/usr/photon/appbuilder:/opt/X11R6/bin:/usr/X11R6/bin:
/usr/local/bin:
/opt/bin:/opt/sbin:
/usr/qnx630/host/qnx6/x86/usr/bin:
/usr/qnx630/host/qnx6/x86/usr/sbin:
/usr/qnx630/host/qnx6/x86/sbin:
/usr/qnx630/host/qnx6/x86/bin:
/usr/qnx630/host/qnx6/x86/usr/photon/appbuilder:
/opt/qt4/bin
Эсли всё таки возникнуть какие то вапросы то пожалста пишите.


Дата: 21 Май,  11:39

Уважаемый Богдан.

Поясните пожалуйста поподробнее, а что в это случае происходит с libc? Ведь gcc будет пытаться собрать свою libc, и ничем добрым это не кончиться, так как gcc об особенностях native API QNX ничего не знает!? То есть надо заставить, чтобы вся подноготная бралась из libc.so.2? Как Вы это обходите?


Дата: 21 Май,  11:50

Ivan в составе gcc нет и никогда не было libc


Дата: 21 Май,  13:04

Да это так и на самом деле происходит.Во время постройки создоёться библётека libgcc и libiberty
кроме конешно других библётек.
На счёт libc to gcc знает как найти libc.so.2 таким путём:
#undef LINK_SPEC
#define LINK_SPEC "%{h*} %{v:-V}
%{b}
%{static:-dn -Bstatic}
%{shared:-G -dy -z text}
%{symbolic:-Bsymbolic -G -dy -z text}
%{G:-G}
%{YP,*}
%{!YP,*:%{p:-Y P,/usr/qnx630/target/qnx6/x86/lib}
%{!p:-Y P,/usr/qnx630/target/qnx6/x86/lib}}
-L /usr/qnx630/target/qnx6/x86/lib
-L /usr/qnx630/target/qnx6/x86/usr/lib
-L /usr/qnx630/target/qnx6/x86/opt/lib
%{Qy:} %{!Qn:-Qy}
-b elf32-i386 -m i386nto
%{!shared: --dynamic-linker /usr/lib/ldqnx.so.2}"

#undef LIB_SPEC
#define LIB_SPEC "
%{!shared:%{!symbolic:-lc -dn -Bstatic -lc}}"
Но это записано в самом компиляторе и практически в явном виде
этого нет необходимости указывать.
На счёт вызовов native API QNX то я этого не проверял.
Я прежде всего использую Adu а там используються свои механизмы
задач и их взаимодейства основанные на POSIX.
Кроме того как известно можно писать программы в QNX так
как в LINUX или BSD. Это конешно особная тема.
Я надеусь что может кто то захочет проверить native API QNX
используя gcc4.20 или gcc4.1.3. gcc4.3.0 очень нестабилный.
Ivan может у тебя есть какие то примеры программ с native API QNX
то пришли мне их и я могу проверит это.


Дата: 21 Май,  14:29

bbceler, как известно, gcc для QNX 6.3 поставляется с возможностью генерации кода для всех, поддерживаемых ОС, платформ. Вот и у меня созрел такой вопрос: может ли Ваш gcc 4.x создавать код для, скажем, ARM?
Еще вопрос: есть ли сборка для кросскомпиляции из под Win32 и др.


Дата: 21 Май,  15:28 · Поправил: Olej

AG
как известно, gcc для QNX 6.3 поставляется с возможностью генерации кода для всех, поддерживаемых ОС, платформ. Вот и у меня созрел такой вопрос: может ли Ваш gcc 4.x создавать код для, скажем, ARM?


как я понимаю, многоплатформенность QNX обеспечивается не стараниями QSSL, а как раз теми платформами, под которые может компилировать gcc - это исходная установка проекта gcc; вот здесь свежее перечисление тех платформ, под которые работает gcc:
http://gcc.gnu.org/install/specific.html

AG
Еще вопрос: есть ли сборка для кросскомпиляции из под Win32 и др.


в QNX реализовано не так и много из платформ, поддерживаемых gcc, вот из 6.3.2 :


/usr/qnx630/target/qnx6 # ls -l
total 104
drwxrwxr-x 13 root root 4096 Sep 15 2006 .
drwxrwxr-x 3 root root 4096 Sep 15 2006 ..
drwxrwxr-x 7 root root 4096 Sep 15 2006 armbe
drwxrwxr-x 7 root root 4096 Sep 15 2006 armle
drwxrwxr-x 3 root root 4096 Nov 01 2006 boot
drwxrwxr-x 14 root root 4096 Sep 15 2006 etc
drwxrwxr-x 4 root root 4096 Nov 01 2006 install
drwxrwxr-x 7 root root 4096 Sep 15 2006 mipsbe
drwxrwxr-x 7 root root 4096 Sep 15 2006 mipsle
drwxrwxr-x 7 root root 4096 Sep 15 2006 ppcbe
drwxrwxr-x 7 root root 4096 Sep 15 2006 shle
drwxrwxr-x 9 root root 4096 Sep 15 2006 usr
drwxrwxr-x 8 root root 4096 Sep 15 2006 x86


Между всеми из поддерживаемых платформ во все - может быть реализована кроссовая компиляция - ключ -b.
Но среди платформ в gcc нет Win32 ( ни "в", ни "из" ).
Для Win32 это нужно смотреть, наверное, что-то из портов MinGW для gcc, типа вот этого:
http://www.qnxclub.net/modules.php?name=Forums&file=viewtopic&t=363&highlight= mingw

А вот с версиями библиотек, особенно С++, на что здесь обратили внимание - может быть куда серьёзнее:
- например, в QNX 6.3.2 есть "родные" 2 версии gcc 2.95.3 и 3.5.5 - любую из них можно "заказать" для использования...
- но не для PhAB-приложений ... там сразу посыпятся неразрешённые ссылки: сами библиотеки PhAB, как я понимаю, скомпилированы на связи только 2.95.3.


Дата: 21 Май,  16:12 · Поправил: Ivan

mike

Ivan в составе gcc нет и никогда не было libc

Посыпаю голову пеплом: просто в Gentoo при пересборке gcc зацепило libc - вот в памяти и отложилось, что они рядом ходят. А на примере FreeBSD вижу - gcc42 пересобирает под себя stdc++ - и это, вроде, понятно.

2bbceler
Вопрос использования под QNX самопального компилятора для меня носит чисто факультативный характер - на мой вгляд, слишком велик риск. Но тема для меня интересная. Вам Богдан, большое спасибо за разъяснения. Что касаемо native API, то тут у меня есть вопросы, но пока слишком сыроваты, чтобы нагружать ими других.

А на словах, скажу следующее: на QNX6.2.1 я в проекте использовал gcc, при переходе на 6.3 выяснелось, что mmap стал себя вести по-другому ( мы с lestat это уже как-то обсуждали ), так вот это поведение отличалось при использовании qcc и gcc. От греха подальше во все свои makefile вбил qcc. Вот поэтому и появляются вопросы/сомнения. Это, кстати, к вопросу поддерживаемых платформ gcc и что из этого может qcc. Хотя в 6.2.1 qcc - это был скрипт, устанавливающий переменные окружения и вызывающий gcc. В 6.3 host/etc/qcc/gcc подрос и qcc - это уже не скрипт.

Богдан, а может Вы опциями configure для gcc42 поделитесь?


Дата: 22 Май,  12:27

Ответ AG:
может ли Ваш gcc 4.x создавать код для, скажем, ARM?
Я уже когдато отвечал на такой вопрос. У меня нет возможносьти проверит этого. Сам gcc 4.x собираю для Intel.
Думаю что не должно быт проблем. Эсли кто то хочеть попробовать то я могу помоч.
И другое:
есть ли сборка для кросскомпиляции из под Win32 и др.
На сколько мне известно нет. Я сам лично работаю под QNX.
Win32 мне не интересует.
К сожалению я gcc 4.x в QNX занимаюсь один.
QSSL это конешно делаеть. Будет оффицяльный gcc4.x в QNX,
но я с ними не имею никокого контака. Я жду когда то им удасться чтобы проверить разницу.
Я занялся gcc в связи с адой. Тeпер удалось построит другие компиляторы для fortran и Objective-C.
Есть доступный Prolog и даже COBOL


Дата: 22 Май,  13:01

Простите я провераю как можно влиять на вид сообшения.
[/b]Proba[b]
[/i]ITAlic[i]
[/u]Podkreślenie[u]
[/b][/i]TEST[i][b]
можо удалить
bogdan


Дата: 22 Май,  13:03

Как исбовиться от [/


Дата: 22 Май,  14:09

bbceler
Я уже когдато отвечал на такой вопрос. У меня нет возможносьти проверит этого. Сам gcc 4.x собираю для Intel.
Думаю что не должно быт проблем. Эсли кто то хочеть попробовать то я могу помоч.

Было бы интересно глянуть на процесс сборки. Есть ли возможность собирать GCC сразу для нескольких целевых платформ? Кстати у QSSL есть пример такой сборки на примере старого компилятора GCC. Много ли исправлять пришлось чтоб GCC заработал на QNX6?
bbceler
На сколько мне известно нет.

Я имел в виду собирали ли Вы так же GCC для Win32 с возможностью генерации кода для QNX (intel/armle/etc...).
По ответу понятно что нет.

Спасибо.


Дата: 22 Май,  14:11 · Поправил: AG

bbceler
Простите я провераю как можно влиять на вид сообшения.
...
можо удалить
bogdan


Надо писать просто <i>italic</i> (угловые скобки заменить на квадратные) чтоб получить italic


Дата: 23 Май,  01:19

Ivan
Вопрос использования под QNX самопального компилятора для меня носит чисто факультативный характер - на мой вгляд, слишком велик риск.
А так ради интереса использование Linux-а это большой риск или нет. Вед он вес построен с помощю gcc. Сам QNX тоже построен используя gcc. qcc практически вызываеть какой то gcc или 2.95.3 или 3.3.5.
Ты писал о проблеме с mmap, что поведение отличалось при использовании qcc и gcc. А вопрос по моему возникал из за этого, что в qcc зашыты параметры компилации - пути к библётекам, хедерам и другие. А само gcc имеет другие установки. Другой вопрос в том что наськолько я помню mmap имел ошибки и не очень уж отвечал стандарту POSIX.
На самом деле компилятор gcc это хотя очен сложный но просто тряньслятор с языка программирования на машинный язык. Вопрос операцённой системы как я это вижу не имеет практически значения. Другое дело платформа.
Единственный метод сравнит нативные QNX компиляторы а gcc 4.x которые я собираю то тестирование и эстественно работа с ними.
Я только что оконьчил построение gcc 4.2.0 release и сделал тестироване по скорости для разных компиляторов.
Это Dhrystone Benchmark, Version 2.1 (Language: C)
Iterations: 10 000 000
Excution results
A - -O0
B - -O3 -fomit-frame-pointer
C - -O2 -fomit-frame-pointer
.............A............B............C
==================================================
qcc 4.288743721 3.050733166 2.932751220
qcc -V3.3.5 3.895803850 2.838365663 2.638596233
gcc3.4.6 3.929198740 2.384835064 2.632797120
GPL-2007 4.536905747 2.402232402 2.665392132
gcc4.2.0 Rel 3.751425944 2.402432371 2.656993417
GPL-2007 основан на gcc 4.1.3 и в нем есть изменения введённые разработчиками ады.
На счёт того какие изменения я делаю в gcc во время сборки компилятора чтобы работал в QNX то правду говаря в самом gcc никаких. Изменяю немного скрипты чтобы не было проблем с построением shared library. Самое главное находиться в configure/i386. Но я точно это опишу в следуюший раз. Я хочу посмотрет ещё как выглядеть дело с другими платформи чтобы ответит AG.


Дата: 23 Май,  10:39

bbceler
А вопрос по моему возникал из за этого, что в qcc зашыты параметры компилации - пути к библётекам, хедерам и другие. А само gcc имеет другие установки. Другой вопрос в том что наськолько я помню mmap имел ошибки и не очень уж отвечал стандарту POSIX.
Здесь я с тобой полностью согласен, qcc, скорее всего, не делает ничего такого особенного, что делает gcc ( ну разве что истечение лицензии проверяет 8o) ), и основая нагрузка на qcc - это правильно установить параметры компиляции и пути к библиотекам. Именно так я рассуждал в свое время. Сворганил простейший проект ( консольный типа "Hello word" и PhAB ), дал qcc ключ -v вся подноготная вылезла наружу. Потом это запихнул gcc3.3.2 ( кажется такая версия была в QNX 6.3.0 ) - результат отличался, т.е. абсолютной совместимости не было. К тому же я программирую на C++, а тут сразу полный набор: std++ от gcc, от Dinkumware с исключениями, без исключений, встраиваемая и т.п. Для данной версии/service pack разберешся, а QSSL в следующем SP чего-то улучшит-подвинет. Сложно получается, поэтому для боевых проектов я застолбил использование qcc. С другой стороны gcc развивается, идет работа над качеством оптимизации, в gcc-4.3 появятся первые реализации С++0x09, поэтому мне интересен твой опыт использования своего компилятора под QNX.

Приведенный тобой Benchmark весьма интересен и показывает, что 4.2 рулит - а это радует. Если бы еще найти или разработать самим Benchmark, по которому можно было бы проверить совместимость текущей платформенной реализации gcc c qcc. В этом случае можно было бы говорить о промышленном применении самосбоного компилятора.

bbceler
Самое главное находиться в configure/i386. Но я точно это опишу в следуюший раз. Я хочу посмотрет ещё как выглядеть дело с другими платформи чтобы ответит AG.

Ну какое-то понятие о настройке компилятора я получил по acats Summary. Но если от тебя будет более подробное описание, то я думаю, заинтерисованных заметно прибавится.


Дата: 24 Май,  13:36

В самом начале хочу заметить что я не занимаюсь языком C++
В время сборки c++ получаюсь ошибки для разрешеня которых мне не хватаеть знаний. Я много работал в c++ но это было ещё в QNX 4.*. Так то что представляю касаеться языков:
c, ada, gfortran и objc.
Эсли бы удалось сделать c++ 4.* тогда можна бы заняться компилятором java и языка d.
То что тепер представляю это состаяние на сегодня.
С времён когда я начинал много изменилось и прежде всего ест значительно проще построит компилятор языка c под QNX.
Источники я беру по адресу:
ftp://gcc.gnu.org/pub/gcc/releases/
или
ftp://gcc.gnu.org/pub/gcc/snapshots/
можна использовать всё или если нас не интересует к примеру ada и java то нужны только gcc-core-* и тот язык который нас интересует.
Я всё делаю в каталоге /src
/src/gcc-4.2.0
И ёще одно сам компилятор написан в c и встаёт вопрос какой компилятор использовать ? Можно пробовать qcc но естественно 3.3.5. Я использую всегда предудушую скомпилированную gcc
Дело ещё в том что в принципе компиляцию надо делат используя bootstrap. Это ведёть к тому что процес проводиться три раза. Сначала стоиться xgcc - это новый компилятор который называеться xgcc чтобы отличить его от gcc который был использован.
И тот же xgcc используеться два раза для построения компилятора. И затем сравниваеться эти две постройки.
Эсли совподають тогда процесс идёт далше и строиться библётеки и другое.
В случае языка ada не можна использовать bootstrap.
Изменения:
1. на верхним уровне я делаю изменения в:
libtool.m4
*qnx* | *nto*)
lt_cv_deplibs_check_method=pass_all
;;
# This must be Linux ELF.
linux-gnu*)
lt_cv_deplibs_check_method=pass_all
;;
===========================
ltcf-cxx.sh
nto-qnx*)
ld_shlibs=yes
;;
*)
# FIXME: insert proper C++ library support
ld_shlibs=no
;;
======================
ltconfig
*nto* | *qnx*)
version_type=linux
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
soname_spec='${libname}${release}.so$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
dynamic_linker='ldqnx.so'
;;

*)
dynamic_linker=no
;;
esac
====================================
ltmain.sh
qnx)
major=".$current"
versuffix=".$current"
;;

sunos)
major=".$current"
versuffix=".$current.$revision"
;;
............................
каталог libiberty
в getpagesize.c
#endif /* GNU_OUR_PAGESIZE */

/*
int
getpagesize (void)
{
return (GNU_OUR_PAGESIZE);
}*/

#ifdef __QNXNTO__
int
getpagesize(void)
{
return (int)sysconf(_SC_PAGESIZE);
}
#endif
===============================
И саме главное в
gcc/config/i386
надо поменять nto.h и t-nto
nto.h
.............................
/* Definitions for Intel 386 running QNX/Neutrino.
Copyright (C) 2002, 2003 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */

#undef DEFAULT_PCC_STRUCT_RETURN
#define DEFAULT_PCC_STRUCT_RETURN 1

#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (QNX/Neutrino/i386 ELF)"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];

#define HANDLE_PRAGMA_PACK_PUSH_POP 1

/* Allow stabs and dwarf, and make stabs the default for Neutrino */
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG

#undef DBX_REGISTER_NUMBER
#define DBX_REGISTER_NUMBER(n)
(TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])

/* When generating stabs debugging, use N_BINCL entries. */
#define DBX_USE_BINCL

/* Make LBRAC and RBRAC addresses relative to the start of the
function. The native Solaris stabs debugging format works this
way, gdb expects it, and it reduces the number of relocation
entries. */
#define DBX_BLOCKS_FUNCTION_RELATIVE 1

#undef TARGET_OS_CPP_BUILTINS
#define TARGET_OS_CPP_BUILTINS()
do
{
builtin_define_std ("__X86__"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_define_std ("__QNXNTO__"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_define_std ("__QNX__"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_define_std ("__ELF__"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_define_std ("__LITTLEENDIAN__"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_assert ("system=qnx"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_assert ("system=qnxnto"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_assert ("system=nto"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_assert ("system=unix"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
builtin_assert ("system=posix"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
}
while (0)

#undef THREAD_MODEL_SPEC
#define THREAD_MODEL_SPEC "posix"

#ifdef CROSS_COMPILE
#define SYSROOT_SUFFIX_SPEC "x86"
#endif

#undef CPLUSPLUS_CPP_SPEC
#define CPLUSPLUS_CPP_SPEC
"-nostdinc -nostdinc++
-isystem /usr/qnx630/target/qnx6/usr/include/c++/3.3.5
%(cpp_cpu)
%{posix:-D_POSIX_SOURCE}"

#undef CPP_SPEC
#define CPP_SPEC
"-idirafter /usr/qnx630/target/qnx6/usr/include
-isystem /usr/qnx630/target/qnx6/usr/include
%(cpp_cpu) %{posix:-D_POSIX_SOURCE}"

#undef STARTFILE_SPEC
#define STARTFILE_SPEC
"%{!shared:
%{!symbolic:
%{pg:/usr/qnx630/target/qnx6/x86/lib/mcrt1.o%s}
%{!pg:%{p:/usr/qnx630/target/qnx6/x86/lib/mcrt1.o%s}
%{!p:/usr/qnx630/target/qnx6/x86/lib/crt1.o%s}}}}
/usr/qnx630/target/qnx6/x86/lib/crti.o%s
%{fexceptions: /usr/qnx630/target/qnx6/x86/lib/crtbegin.o%s}
%{!fexceptions: /usr/qnx630/target/qnx6/x86/lib/crtbegin.o}"

#undef ENDFILE_SPEC
#define ENDFILE_SPEC
"%{fexceptions: /usr/qnx630/target/qnx6/x86/lib/crtend.o%s}
%{!fexceptions: /usr/qnx630/target/qnx6/x86/lib/crtend.o}
/usr/qnx630/target/qnx6/x86/lib/crtn.o"

#undef LINK_SPEC
#define LINK_SPEC
"%{h*} %{v:-V}
%{b} %{Wl,*:%*}
%{static:-dn -Bstatic}
%{shared:-G -dy -z text}
%{symbolic:-Bsymbolic -G -dy -z text}
%{G:-G}
%{YP,*}
%{!YP,*:%{p:-Y P,/usr/qnx630/target/qnx6/x86/lib}
%{!p:-Y P,/usr/qnx630/target/qnx6/x86/lib}}
-L /usr/qnx630/target/qnx6/x86/lib
-L /usr/qnx630/target/qnx6/x86/usr/lib
-L /usr/qnx630/target/qnx6/x86/opt/lib
%{Qy:}
%{!Qn:-Qy}
-b elf32-i386 -m i386nto
%{!shared: --dynamic-linker /usr/lib/ldqnx.so.2}"

#undef LIB_SPEC
#define LIB_SPEC "
%{shared:-lc}
%{!shared:%{!symbolic:-lc -dn -Bstatic -lc}}"

#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"

#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "int"

#undef WCHAR_TYPE
#define WCHAR_TYPE "unsigned int"

#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE BITS_PER_WORD

#define NO_IMPLICIT_EXTERN_C 1
=====================================
t-nto
...........................
T_CFLAGS = -D__QNXTARGET__
CRTSTUFF_T_CFLAGS = -fPIC -fno-omit-frame-pointer
TARGET_LIBGCC2_CFLAGS = -fPIC -fexceptions
FIXPROTO_DEFINES = -D__QNX__ -D__QNXNTO__ -D__X86__ -D__GNUC__ -D__LITTLEENDIAN__

EXTRA_PARTS = crtbegin.o
===================================
Компиляцию яведу используя сначала build-ntox86.nto
который вызываеть build-nto
build-ntox86.nto
.............................................
#!/bin/sh

target=ntox86 ./build-nto
=================================

build-nto
.............................................
#!/bin/sh

basedir=`pwd`

if [ -z "$target" ]; then
echo "Don't run this script without setting target!"
exit 1
fi

case "$target" in
nto*) dir=/usr/local ;;
*) dir=/opt/QNXsdk/host/qnx6/x86/usr ;;
esac

rm -rf nto/$target
mkdir -p nto/$target
cd nto/$target

#export CC="env QCC_CONF_PATH=$QCC_CONF_PATH QNX_TARGET=$QNX_TARGET QSSL_TARGET=$QNX_TARGET qcc -Vgcc_ntox86"
export ADAC=/usr/local/bin/gcc
#export CC="qcc -V3.3.1,gcc_ntox86"
CXX="qcc -V3.3.5,gcc_ntox86"
CC="gcc -v -save-temps"
CPP="gcc -E"
#export CFLAGS="-O2"
CFLAGS="-save-temps -g -O2"
LIBCFLAGS="-g -O2"
LIBCXXFLAGS="-g -O2 -fno-implicit-templates"
#export CC="qcc"
LDFLAGS="-Wl,-s"
if $basedir/configure
--srcdir=$basedir
--program-suffix=4.2.0
--enable-version-specific-/">


Дата: 24 Май,  16:09

Большое спасибо за предоставленный FAQ.

Буду на досуге разбираться и эксперементировать с g++. Осталось выделить время для досуга 8о).

Если будут результаты или вопросы, то сообщу в этом треде.


Дата: 30 Май,  12:16

Я проверил можна сделать компилятор gcc 4.2.x используя qcc. Оказываеться что с помошу qcc 3.3.5 это возможно.
Я выложил на моём сайте файли которые надо использовать и эти которые надо заменить. Compilation of the gcc 4.2.x using qcc 3.3.5
Хватить взять только gcc-core-4.2-*
Может кто то захочет проверить ..........


Дата: 30 Май,  12:32

На счёт построения gcc 4.2.x на другие платформы чем x86.
Это вазможно если использовать файли от gcc 2.95.3 которые доступны. Надо их только конешно посмотрет на счёт изменений для QNX 6.3.
Стоило бы посмотрет как это делают для BSD или LINUX.
Надо смотрет в gcc/config/arm и других каталогах.
Но для этого нада знать эти платформы.
Сам по себе процесс сборки простой нада только заменит
target=ntox86 ./build-nto
на target=arm ./build-arm
build-arm надо взять от gcc 2.95.3-qnx63


Дата: 11 Июн,  23:21

На конец то мне удалось построить первый раз работающий компилятор c++ для QNX 6.3.0.
Это c++/g++ 4.1.3.
# gcc --version
gcc (GCC) 4.1.3 20070604 (prerelease)
# gfortran --version
GNU Fortran (GCC) 4.1.3 20070604 (prerelease)
# g++ --version
g++ (GCC) 4.1.3 20070604 (prerelease)
library => libstdc++.so.6
# c++ --version
c++ (GCC) 4.1.3 20070604 (prerelease)
library => libstdc++.so.6
Вот так работаеть:
# cat pr1.cc
#include <iostream.h>
main( void )
{
cout << "Hello .............." << endl;
}
# c++ -o pr1 pr1.cc
In file included from /usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++/backward/iostream.h:31,
from pr1.cc:1:
/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++/backward/backward_warning.h:32:2: warning:
#warning This file includes at least one deprecated or antiquated header. Please consider using one of the
32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for
the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>.
To disable this warning use -Wno-deprecated.
# ./pr1
Hello ..............
Press any key to continue...
================================
И что то сложнее:
# cat pr3.cc
#include <iostream>
#include <streambuf>
#include <locale>
#include <cstdio>

class outbuf : public std::streambuf
{
protected:
/* central output function
* - print characters in uppercase mode
*/
virtual int_type overflow (int_type c) {
if (c != EOF) {
// convert lowercase to uppercase
c = std::toupper(static_cast<char>(c),getloc());

// and write the character to the standard output
if (putchar(c) == EOF) {
return EOF;
}
}
return c;
}
};

int main()
{
// create special output buffer
outbuf ob;
// initialize output stream with that output buffer
std:stream out(&ob);

out << "31 hexadecimal: "
<< std::hex << 31 << std::endl;
return 0;
}

# g++ -v -opr3 pr3.cc
Using built-in specs.
Target: i386-pc-nto-qnx6.3.0
Configured with: /src/gcc-4.1-20070604/configure --srcdir=/src/gcc-4.1-20070604 --program-suffix=4.1.3
--enable-version-specific-runtime-libs --enable-languages=c,c++,ada,fortran,objc,obj-c++
--enable-threads=posix --enable-shared --enable-libssp --enable-libada --disable-werror
--with-included-gettext --with-libiconv-prefix=/usr/local --cache-file=Cashe.log
Thread model: posix
gcc version 4.1.3 20070604 (prerelease)
/usr/local/libexec/gcc/i386-pc-nto-qnx6.3.0/4.1.3/cc1plus -quiet -v -nostdinc -nostdinc++
-isystem /usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++
-isystem /usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++/i386-pc-nto-qnx6.3.0
-isystem /usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++/backward
-idirafter /usr/qnx630/target/qnx6/usr/include
pr3.cc -quiet -dumpbase pr3.cc -auxbase pr3 -version -o /tmp/ccbkJpIr.s
#include "..." search starts here:
#include <...> search starts here:
/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++
/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++/i386-pc-nto-qnx6.3.0
/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/include/c++/backward
/usr/qnx630/target/qnx6/usr/include
End of search list.
GNU C++ version 4.1.3 20070604 (prerelease) (i386-pc-nto-qnx6.3.0)
compiled by GNU C version 4.1.3 20070604 (prerelease).
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 0ba1a88cbabcebd22c3904fced6baada
/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/../../../../i386-pc-nto-qnx6.3.0/bin/as -V -Qy
-o /tmp/cc1Pzieg.o /tmp/ccbkJpIr.s
GNU assembler version 2.17 (i386-pc-nto-qnx6.3.0) using BFD version 2.17
/usr/local/libexec/gcc/i386-pc-nto-qnx6.3.0/4.1.3/collect2 -V -Y P,/usr/qnx630/target/qnx6/x86/lib
-Qy -b elf32-i386 -m i386nto --dynamic-linker /usr/lib/ldqnx.so.2
-opr3 /usr/qnx630/target/qnx6/x86/lib/crt1.o /usr/qnx630/target/qnx6/x86/lib/crti.o
/usr/qnx630/target/qnx6/x86/lib/crtbegin.o
-L/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3
-L/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/../../../../i386-pc-nto-qnx6.3.0/lib
-L/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3/../../.. /tmp/cc1Pzieg.o
-lstdc++ -lm -lgcc
-L /usr/qnx630/target/qnx6/x86/lib
-L /usr/qnx630/target/qnx6/x86/usr/lib
-L /usr/qnx630/target/qnx6/x86/opt/lib -lc -dn -Bstatic -lc -lgcc
/usr/qnx630/target/qnx6/x86/lib/crtend.o /usr/qnx630/target/qnx6/x86/lib/crtn.o
GNU ld version 2.17
Supported emulations:
i386nto
# ./pr3
31 HEXADECIMAL: 1F
# ldd pr3
./pr3:
libstdc++.so.6 => /usr/local/lib/libstdc++.so.6 (0xb8200000)
libm.so.2 => /lib/libm.so.2 (0xb82db000)
libc.so.2 => /usr/lib/ldqnx.so.2 (0xb0300000)
#
Я спецяльно использовал опцию -v чтобы показать точнее как
компилятор работает.
У меня возникло много вопросов которые я решал прежде всего
методом выброшывания неработаюших элементов.
Я собераюсь нанести рорядок в моих эаметках и прежде всего
описать процесс сборки. Многие вопросы возникли я думаю из
за этого, что я практически не работаю с c++ уже где то 10 лет. К сожалени сегодня мне не удалось загрузить компилятор на мой сайт. Как только это удасьтся сообщю.


Дата: 12 Июн,  17:56

Компилятор c++/g++4.1.3 уже доступен на http://www.ajam.org.pl.
Я надеюсь что найдутся среди посетителей форума желаюшие помоч в проверке работы этого компилятора.


Дата: 14 Июн,  10:59

Я сделал первый думаю серёзный опыт для c++/g++4.1.3.
Без проблем скомпилировал QT4.3.0.
Примеры скомпилировались и работають.
Очень интересно выглядять примеры с графикой. Такого я ещё в QNX не видел. Очень интересны примеры с использованем SQL, работает тоже сеть. Вообше советую посмотрет.


Дата: 6 Июл,  22:45

Эсли у кого то возникають проблемы с установкой c++/g++4.1.3 то я постараюсь описать это вкратце.
После скачивания компилятора надо его поместить в корень /
# cd /
# bz2cat gcc-4.1.3-x86-public-qnx6.3.tar.bz2 | pax -rv
После окончания компилятор, библетеки и другие файли будуть помещены в каталоги:
/usr/local/bin
/usr/local/info
/usr/local/lib
/usr/local/lib/gcc/i386-pc-nto-qnx6.3.0/4.1.3
/usr/local/libexec/gcc/i386-pc-nto-qnx6.3.0/4.1.3
/usr/local/man
/usr/local/share

gcc и g++ находяться в /usr/local/bin
В принципе все должно сработать сразу. Только вместо qcc надо использовать gcc или g++.
Эсли возникнуть проблемы то надо посмотреть где находиться gcc. У меня картина такая:
# find /usr -name gcc
/usr/qnx630/host/qnx6/x86/etc/qcc/gcc
/usr/qnx630/host/qnx6/x86/lib/gcc
/usr/qnx630 /host/qnx6/x86/usr/bin/gcc
/usr/qnx630/target/qnx6/armbe/lib/gcc
/usr/qnx630/target/qnx6 /armle/lib/gcc
/usr/qnx630/target/qnx6/mipsbe/lib/gcc
/usr/qnx630/target/qnx6/mipsle/lib /gcc
/usr/qnx630/target/qnx6/ppcbe/lib/gcc
/usr/qnx630/target/qnx6/shle/lib/gcc
/usr/qn x630/target/qnx6/x86/lib/gcc
/usr/qnx630/lib/gcc
/usr/local/lib/gcc
/usr/local/bin/gcc
/usr/local/libexec/gcc
#
Как видно gcc находиться в /usr/qnx630/host/qnx6/x86/usr/bin и в /usr/local/bin Который gcc будеть использован зависит от того как уставлена переменная PATH.
# set
...........
LD_LIBRARY_PATH=/proc/boot:
/lib:
/usr/lib:
/lib/dll:
/opt/lib:
/usr/photon/lib:
/usr/photon/dll:
/usr/local/lib:
/opt/X11R6/lib:
/usr/X11R6/lib:
/usr/local/Trolltech/Qt-4.3.0/lib
LOGNAME=root
MAILCHECK=600
MAKEFLAGS=-I/usr/qnx630/ta rget/qnx6/usr/include
OPTIND=1
PATH=/sbin:
/usr/sbin:
/bin:
/usr/bin:
/usr/photon/bin:
/usr/photon/appbuilder:
/opt/X11R6/bin:
/usr/X11R6/bin:
/usr/local/bin:
/opt/bin:
/opt/sbin:
/usr/qnx630/host/qnx6/x86/usr/bin:
/usr/qnx630/host/qnx6/x86/usr/sbin:
/usr/qnx630/host/qnx6/x86/sbin:
/usr/qnx630/host/qnx6/x86/bin:
/usr/qnx630/host/qnx6/x86/usr/photon/appbuilder:
/usr/local/Trolltech/Qt-4.3.0/bin
PHFONT=/dev/phfont
....................
Как видно первый путь это /usr/local/bin: поэтому у меня всегда пспользуеться gcc 4.х. Эсли я хочу использовать нативный компилятор QNX то использую qcc который находиться в:
# find /usr -name qcc
/usr/qnx630/host/qnx6/x86/etc/qcc
/usr/qnx630/host/qnx6/x86/usr/bin/qcc
#
И еще одна проблема. Для провильной работы компилятора требуеться библетека libiconv.
# ldd gcc
./gcc:
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0xb8200000)
libc.so.2 => /usr/lib/ldqnx.so.2 (0xb0300000)
# ldd c++
./c++:
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0xb8200000)
libc.so.2 => /usr/lib/ldqnx.so.2 (0xb0300000)
У меня эта библетека находиться в /usr/local/lib
Точнее это выглядить так:
# ls -l /usr/local/lib | grep libiconv
-rw-r--r-- 1 root root 1162536 May 11 16:21 libiconv.a
-rw-r--r-- 1 root root 799 May 11 16:21 libiconv.la
lrwxrwxrwx 1 root root 17 May 11 16:21 libiconv.so -> libiconv.so.2.3.0
lrwxrwxrwx 1 root root 17 May 11 16:21 libiconv.so.2 -> libiconv.so.2.3.0
-rwxrwxrwx 1 root root 1070481 Jan 16 2005 libiconv.so.2.2.0
-rw-r--r-- 1 root root 1117693 May 11 16:21 libiconv.so.2.3.0
-rwxrwxr-x 1 root root 1166076 Mar 31 01:10 libiconv.so.2.4.0
#


Дата: 26 Июл,  12:11

Появилась новая стабильная версия gcc 4.2.1
Скоро выложу на моей страничке.
С точки зрения QNX основная новость то то что тепер С++ тоже
доступень. Простые тесты проходить.


Дата: 28 Июл,  12:45

Я решил приостановить выложение gcc 4.2.1
В библетеке libc++ оказалось эсть ошибка.
Неправильно работаеть :
try
{
--> throw std::runtime_error("Test"[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img];
}
=========================================
# gdb ./test
GNU gdb 6.4 for GNAT GPL 2006 (20070322)
Copyright 2005-2007 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
See your support agreement for details of warranty and support.
If you do not have a current support agreement, then there is absolutely
no warranty for this version of GDB. Type "show warranty" for details.
This GDB was configured as "i386-pc-nto-qnx6.3.0"...
(gdb) n
The program is not being run.
(gdb) start
Breakpoint 1 at 0x8048bbc
Starting program: /root/G++/test
0x08048bbc in main ()
(gdb) s
Single stepping until exit from function main,
which has no line number information.
std::allocator<char>::allocator (this=0x8047937)
at /src/gcc-4.1-20070709/nto/ntox86/i386-pc-nto-qnx6.3.0/libstdc++-v3/include/bits/allocator.h:97
97 allocator() throw() { }
Current language: auto; currently c++
(gdb) l
92
93 template<typename _Tp1>
94 struct rebind
95 { typedef allocator<_Tp1> other; };
96
97 allocator() throw() { }
98
99 allocator(const allocator& __a) throw()
100 : __glibcxx_base_allocator<_Tp>(__a) { }
101
(gdb) n
0x08048bcb in main ()
(gdb) l
102 template<typename _Tp1>
103 allocator(const allocator<_Tp1>&[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img] throw() { }
104
105 ~allocator() throw() { }
106
107 // Inherit everything else.
108 };
109
110 template<typename _T1, typename _T2>
111 inline bool
(gdb) n
Single stepping until exit from function main,
which has no line number information.

Program received signal SIGABRT, Aborted.
0xb032e7f5 in SignalKill () from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
(gdb) where
#0 0xb032e7f5 in SignalKill () from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
#1 0xb03217c8 in raise () from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
#2 0xb03204f1 in abort () from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
#3 0x0804a4c0 in uw_init_context_1 (context=0x8047860, outer_cfa=0x80478e0, outer_ra=0xb82aa8c8)
at /src/gcc-4.1-20070709/gcc/unwind-dw2.c:1103
#4 0x0804a962 in _Unwind_RaiseException (exc=0x80520b0) at /src/gcc-4.1-20070709/gcc/unwind.inc:92
#5 0xb82aa8c8 in __cxa_throw (obj=0x80520d0, tinfo=0x804dae0,
dest=0x80489f8 <_ZNSt13runtime_errorD1Ev@plt>[img]http://qnx.org.ru/components/minibb/img/smilies/wink.gif[/img]
at /src/gcc-4.1-20070709/libstdc++-v3/libsupc++/eh_throw.cc:72
#6 0x08048c9a in main ()
(gdb) n
Single stepping until exit from function SignalKill,
which has no line number information.

Program exited normally.
(gdb)


Дата: 28 Июл,  12:50

И еще одно.
Ошибка эсть тоже в g++ 4.1.3


Дата: 7 Авг,  22:12

Я получил подсказку чтобы использовать –enable-sjlj-exceptions для уомпиляции g++.
И это решило проблему. Но появлаються вопросы.
============================================
--enable-sjlj-exceptions
Forces old, set-jump/long-jump exception handling model. If at all possible, the new, frame unwinding exception handling routines should be used instead, as they significantly reduce both runtime memory usage and executable size. This option can change the library ABI.
============================================
это из: http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html
В других местах я нашол что set-jump/long-jump исключения влияют не только на память но программы работают медленнее.
Я не очень уверен что это так и получаеться.
Может у кого есть опыт в этой области.
Проблема в том, что пока выглядить что надо принять какое то решение. Или принять что использовать модель set-jump/long-jump исключения или попробовать исправить код компилятора. Но и потом стоило бы занятся тестированием который варянт лучше.
Почему я написал что я не уверен что программы работають в модели set-jump/long-jump исключения медленнее.
В случае языка ада считаеться что модель set-jump/long-jump все таки лучше потому что когда появляеться исклучение переход на процедуру обработки очень быстрый. А в случае exception propagation программа работаеть значительно быстрее чем в случае использования другой модели обработки исклучени. Эстественно что в случае когда исклучения не появляться выигрыша не будеть.
Вопрос довольно сложный.


Дата: 9 Авг,  09:01

Здравствуйте, bbceler.
Отвечаю Вам на QOR, т.к. уже который раз не могу зарегистрироваться на qnxclub.net 8o(.

По вопросу GCC 4.x в QNX

Насколько я понял компилятор не генерит перехватчик исключений. Не знаю поможет ли Вам такая информация: в gcc 2.95.x тоже были такие проблемы, например компилятор не мог перехватить исключение внутри блока ( if, for ), но нормально перехватывал тоже исключение если скобкой try{}catch{} охватывать все тело функции целиком.

Может попробывать в тестовом примере поиграть положением try{}catch{} за счет фиктивных операторов? Естественно это не решение проблеммы, но может поможет ее исследованию.


Дата: 11 Авг,  12:56

Ivan
Отвечаю Вам на QOR, т.к. уже который раз не могу зарегистрироваться на qnxclub.net 8o(.


offtopic :
- mail с сервера qnxclub.net - не идут на некоторые домены... в частности @mail.ru - это проблема не сервера, а просто эти домены закрыты для отправки с Канады (деталей я не знаю, но, думаю, что сделали они в борьбе со спамом).
Как делу помочь:
- заведите временный mail на другом домене, с него регистрируйтесь, и будет вам счастье - например @front.ru - туда гарантированно доходит.


Дата: 2 Янв,  00:01

Прежде всего я бы хотел пожелать всем всего самого лучшего
С новым годом. Много счястья, денег и здоровия. Пусть этот
год будеть лучшим, а по крайней мере не хуже того который
уже прошол в небытье.
-------------------------
У меня появились проблемы в связи с компилированием c++.
Практически для всех версий 4.1.х, 4.2.х и 4.3.0 при постройке
хэдеров строяться очень болшие файли рорядка 20 GB. И всегда
они испорчены. Я вынужден запускать chkfsys / чтобы исправить
файловую систему. Эти проблемы появились когда я прошол на QNX 6.3.2
Я сначала думал, что проблема в моим компютере. Я поменял свой
старый Pentium 4 на Intel Core2 Quad Q6600 2.49GHz. И начялось.
Оказалось что не удаеться посадить QNX 6.3.2 на новым компютере.
Я использовал старый комрютер и потом перенес диск на новый.
Кроме того во время попыток пазрушылсья мой главный диск на
котором практически нахадилась вся моя робота в области QNX.
И как не трудно догодаться последние месяцы не были перенесены
в архивум. Я очень много дней потерал на попытквх отыскания
потерянных каталогов. К счястью все окончилось успешно. Эсли
кого то интересуеть как надо поступать в такой сытуации то пишите.
Теперь я работаю на Core2 Quad. На много возрасло скорость работы.
Но проблема с построением с++ осталась. Можеть проблема в работе файловой
системы в QNX 6.3.2 ? Можеть у кто то встречался с пахожими проблемами.
bogdan


Дата: 2 Янв,  00:17

На счеть проблемы с работой исключений в с++. Я просмотрел источники
gcc 4.2.1 выложены на сайте QNX и переработал процесс сборки компилаторов
и много файлов. У меня ест готовые сборки самых последних версии 4.1.3
и 4.2.3 и в них ошибка не возникаеть. Эти сборки сделаны на и для QNX 6.3.2
Я скоро их вылажу на моим сайте.
bogdan

. 1 . 2 . >>

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source