Страниц: [1] 2 3 4
  Печать  
Автор Тема: GCC 4.x в QNX  (Прочитано 46999 раз)
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« : Мая 21, 2007, 04:45:01 am »

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
Эсли всё таки возникнуть какие то вапросы то пожалста пишите.
Записан
Ivan
Участник
*
Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #1 : Мая 21, 2007, 02:39:07 pm »

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

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

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #2 : Мая 21, 2007, 02:50:08 pm »

Ivan в составе gcc нет и никогда не было libc
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #3 : Мая 21, 2007, 04:04:16 pm »

Да это так и на самом деле происходит.Во время постройки создоёться библётека 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
то пришли мне их и я могу проверит это.
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #4 : Мая 21, 2007, 05:29:01 pm »

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

olej
QOR.Team
****
Offline Offline

Сообщений: 42



Просмотр профиля
« Ответ #5 : Мая 21, 2007, 06:28:35 pm »

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.
Записан
Ivan
Участник
*
Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #6 : Мая 21, 2007, 07:12:31 pm »

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 поделитесь?
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #7 : Мая 22, 2007, 03:27:20 pm »

Ответ 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
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #8 : Мая 22, 2007, 04:01:47 pm »

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

Сообщений: 149


Просмотр профиля WWW
« Ответ #9 : Мая 22, 2007, 04:03:29 pm »

Как исбовиться от [/
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #10 : Мая 22, 2007, 05:09:23 pm »

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

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

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

Спасибо.
Записан

AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #11 : Мая 22, 2007, 05:11:07 pm »

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


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

bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #12 : Мая 23, 2007, 04:19:06 am »

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.
Записан
Ivan
Участник
*
Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #13 : Мая 23, 2007, 01:39:25 pm »

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. Но если от тебя будет более подробное описание, то я думаю, заинтерисованных заметно прибавится.
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #14 : Мая 24, 2007, 04:36:12 pm »

В самом начале хочу заметить что я не занимаюсь языком C++
В время сборки c++ получаюсь ошибки для разрешеня которых мне не хватаеть знаний. Я много работал в c++ но это было ещё в QNX 4.*. Так то что представляю касаеться языков:
c, ada, gfortran и objc.
Эсли бы удалось сделать c++ 4.* тогда можна бы заняться компилятором java и языка d.
То что тепер представляю это состаяние на сегодня.
С времён когда я начинал много изменилось и прежде всего ест значительно проще построит компилятор языка c под QNX.
Источники я беру по адресу:
http://ftp://gcc.gnu.org/pub/gcc/releases/
или
http://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)";

#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__";      
        builtin_define_std ("__QNXNTO__";   
        builtin_define_std ("__QNX__";      
        builtin_define_std ("__ELF__";      
        builtin_define_std ("__LITTLEENDIAN__";
        builtin_assert ("system=qnx";      
        builtin_assert ("system=qnxnto";   
        builtin_assert ("system=nto";      
        builtin_assert ("system=unix";      
        builtin_assert ("system=posix";        
    }                  
  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-/">
Записан
Страниц: [1] 2 3 4
  Печать  
 
Перейти в: