Страниц: 1 [2] 3 4
  Печать  
Автор Тема: GCC 4.x в QNX  (Прочитано 49259 раз)
Ivan
Участник
*
Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #15 : Мая 24, 2007, 07:09:48 pm »

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

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

Если будут результаты или вопросы, то сообщу в этом треде.
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


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

Я проверил можна сделать компилятор 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-*
Может кто то захочет проверить ..........
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #17 : Мая 30, 2007, 03:32:41 pm »

На счёт построения 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
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #18 : Июня 12, 2007, 02:21:18 am »

На конец то мне удалось построить первый раз работающий компилятор 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 лет. К сожалени сегодня мне не удалось загрузить компилятор на мой сайт. Как только это удасьтся сообщю.
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #19 : Июня 12, 2007, 08:56:42 pm »

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

Сообщений: 149


Просмотр профиля WWW
« Ответ #20 : Июня 14, 2007, 01:59:50 pm »

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

Сообщений: 149


Просмотр профиля WWW
« Ответ #21 : Июля 07, 2007, 01:45:48 am »

Эсли у кого то возникають проблемы с установкой 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
#
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #22 : Июля 26, 2007, 03:11:29 pm »

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

Сообщений: 149


Просмотр профиля WWW
« Ответ #23 : Июля 28, 2007, 03:45:59 pm »

Я решил приостановить выложение gcc 4.2.1
В библетеке libc++ оказалось эсть ошибка.
Неправильно работаеть :
    try
    {
-->   throw std::runtime_error("Test";
    }
=========================================
# 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>& 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>
    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)
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #24 : Июля 28, 2007, 03:50:58 pm »

И еще одно.
Ошибка эсть тоже в g++ 4.1.3
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #25 : Августа 08, 2007, 01:12:54 am »

Я получил подсказку чтобы использовать –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 программа работаеть значительно быстрее чем в случае использования другой модели обработки исклучени. Эстественно что в случае когда исклучения не появляться выигрыша не будеть.
Вопрос довольно сложный.
Записан
Ivan
Участник
*
Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #26 : Августа 09, 2007, 12:01:07 pm »

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

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

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

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

Сообщений: 42



Просмотр профиля
« Ответ #27 : Августа 11, 2007, 03:56:22 pm »

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


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

Сообщений: 149


Просмотр профиля WWW
« Ответ #28 : Января 02, 2008, 03:01:43 am »

Прежде всего я бы хотел пожелать всем всего самого лучшего
С новым годом. Много счястья, денег и здоровия. Пусть этот
год будеть лучшим, а по крайней мере не хуже того который
уже прошол в небытье.
-------------------------
У меня появились проблемы в связи с компилированием 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
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #29 : Января 02, 2008, 03:17:02 am »

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