Привет!
Попытался собрать Qt в линуксе для кросс-компиляции для QNX.
Calculate Linux Desktop 11.2 x86
Делал так:
Скачал qt-everywhere-opensource-src-4.8.0.tgz с сайта Нокии.
Распаковал в /root/tmp
поправил File: .../src/3rdparty/webkit/Source/JavaScriptCore/heap/MachineStackMarker.cpp
#ifndef SA_RESTART
#error MachineThreads requires SA_RESTART
#endif
Between lines 80-84 remove these lines and save the changed file.
далее запустил
# ./configure -xplatform unsupported/qws/qnx-i386-g++ -embedded i386 -no-gfx-linuxfb \
-no-mouse-linuxtp -no-kbd-tty -no-qt3support -qt-gfx-qnx -qt-mouse-qnx -qt-kbd-qnx \
-no-exceptions
#gmake
#gmake install
Все собралось и установилось нормально.
*************************************************
затем пытаюсь собрать тот же проект из примеров Qt, который собирал под windows для QNX - findfiles
**************************************
Просто проверка компиляции для линукс linux:
calculate findfiles # qmake -project
calculate findfiles # qmake
calculate findfiles # make
g++ -c -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp
g++ -c -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o window.o window.cpp
/usr/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. window.h -o moc_window.cpp
g++ -c -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o moc_window.o moc_window.cpp
g++ -Wl,-O1 -Wl,-rpath,/usr/lib/qt4 -o testtt main.o window.o moc_window.o -L/usr/lib/qt4 -lQtGui -L/usr/lib/qt4 -L/usr/X11R6/lib -lQtCore -lgthread-2.0 -lrt -lglib-2.0 -lpthread
бинарник собирается и все работает
************************************
теперь для Qnx:
в файл конфигурации bash /root/.bash_profile добавил these lines
export PATH=$PATH:/opt/qnx650/host/linux/x86/usr/bin:/etc/qnx/bin
export QNX_CONFIGURATION=/etc/qnx
export QNX_HOST=/opt/qnx650/host/linux/x86
export QNX_JAVAHOME=/opt/qnx650/_jvm
export QNX_TARGET=/opt/qnx650/target/qnx6
export QWS_DISPLAY=qnx
export QWS_KEYBOARD=qnx
export QWS_MOUSE_PROTO=qnx
export XDG_CONFIG_HOME=/root
export QMAKESPEC=unsupported/qws/qnx-i386-g++
сделал симлинк на компилятор, т.к. обнаружил что в формируемом makefile имя ntox86-g++-4.2.4 вместо имеющегося ntox86-g++-4.4.2
calculate # cd /opt/qnx650/host/linux/x86/usr/bin
calculate bin # ln -s ntox86-g++-4.4.2 ntox86-g++-4.2.4
Собственно сборка:
calculate findfiles # qmake -project
calculate findfiles # qmake -spec unsupported/qws/qnx-i386-g++
calculate findfiles # make
ntox86-g++-4.2.4 -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/unsupported/qws/qnx-i386-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp
ntox86-g++-4.2.4 -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/unsupported/qws/qnx-i386-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o window.o window.cpp
/usr/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/unsupported/qws/qnx-i386-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -D__QNXNTO__ window.h -o moc_window.cpp
ntox86-g++-4.2.4 -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/unsupported/qws/qnx-i386-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o moc_window.o moc_window.cpp
ntox86-g++-4.2.4 -Wl,--no-undefined -Wl,-rpath,/usr/lib/qt4 -o findfiles main.o window.o moc_window.o -L/usr/lib/qt4 -lQtGui -L/usr/lib/qt4 -L/usr/X11R6/lib -lQtCore -lgthread-2.0 -lrt -lglib-2.0 -lpthread
/opt/qnx650/host/linux/x86/usr/bin/ntox86-ld: cannot find -lgthread-2.0
collect2: ld returned 1 exit status
make: *** [findfiles] Ошибка 1
Не подскажете, как разрешить эту ошибку линковщика и собрать проект? Пока непонятно, в какую сторону смотреть - пути для поиска библиотек теже.
Исходники прилагаю. Там же два скрипта для сборки исходников как для линукса, так и для Qnx
Вот вывод переменных окружения
calculate findfiles # set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="9" [3]="2" [4]="release" [5]="i686-pc-linux-gnu")
BASH_VERSION='4.1.9(2)-release'
COLUMNS=124
CONFIG_PROTECT='/usr/share/gnupg/qualified.txt /usr/share/config /usr/share/openvpn/easy-rsa /usr/share/themes/oxygen-gtk/gtk-2.0'
CONFIG_PROTECT_MASK='/etc/gentoo-release /etc/sandbox.d /etc/fonts/fonts.conf /etc/terminfo /etc/ca-certificates.conf /etc/revdep-rebuild /etc/splash'
CVS_RSH=ssh
DIRSTACK=()
DISPLAY=:0
EDITOR=/usr/bin/vim
EUID=0
GCC_SPECS=
GDK_USE_XFT=1
GROUPS=()
HISTCONTROL=ignorespace
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/root
HOSTNAME=calculate
HOSTTYPE=i686
IFS=$' \t\n'
INFOPATH=/usr/share/info:/usr/share/binutils-data/i686-pc-linux-gnu/2.20.1/info:/usr/share/gcc-data/i686-pc-linux-gnu/4.4.5/info
KDE_IS_PRELINKED=1
LANG=ru_RU.UTF-8
LC_NUMERIC=POSIX
LD_LIBRARY_PATH=/opt/qnx650/host/linux/x86/usr/lib
LESS='-R -M --shift 5'
LESSOPEN='|lesspipe.sh %s'
LINES=38
LOGNAME=root
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.pdf=00;32:*.ps=00;32:*.txt=00;32:*.patch=00;32:*.diff=00;32:*.log=00;32:*.tex=00;32:*.doc=00;32:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'
MACHTYPE=i686-pc-linux-gnu
MAILCHECK=60
MAKEFLAGS=-I/opt/qnx650/target/qnx6/usr/include
MANPATH=/usr/local/share/man:/usr/share/man:/usr/share/binutils-data/i686-pc-linux-gnu/2.20.1/man:/usr/share/gcc-data/i686-pc-linux-gnu/4.4.5/man
MC_SID=5087
MC_TMPDIR=/tmp/mc-root
OLDPWD=/root/tmp/testtt
OPENGL_PROFILE=xorg-x11
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PAGER=/usr/bin/less
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.4.5:/opt/qnx650/host/linux/x86/usr/bin:/etc/qnx/bin
PIPESTATUS=([0]="0")
PPID=5085
PRELINK_PATH_MASK=/usr/lib/klibc:/usr/lib/libfreebl3.so:/usr/lib/libnssdbm3.so:/usr/lib/libsoftokn3.so
PROMPT_COMMAND='pwd>&7;kill -STOP $$'
PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
PS2='> '
PS4='+ '
PWD=/media/4GB/findfiles
QNX_CONFIGURATION=/etc/qnx
QNX_HOST=/opt/qnx650/host/linux/x86
QNX_JAVAHOME=/opt/qnx650/_jvm
QNX_TARGET=/opt/qnx650/target/qnx6
QT_PLUGIN_PATH=/usr/lib/kde4/plugins
SANE_CONFIG_DIR=/etc/sane.d
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=2
TERM=xterm
UID=0
USB_DEVFS_PATH=/dev/bus/usb
USER=root
XAUTHORITY=/root/.xauthWku25O
XDG_CONFIG_DIRS=/etc/xdg
XDG_DATA_DIRS=/usr/local/share:/usr/share
XSESSION=KDE-4
_=/media/4GB/findfiles
Не подскажете, как разрешить эту ошибку линковщика и собрать проект? Пока непонятно, в какую сторону смотреть - пути для поиска библиотек теже.
Используй qmake из каталога с собранной Qt. При кросссборке Qt под другую платформу всегда собираются утилиты под твою. И насколько я понимаю, всё это (утилиты, заголовочные файлы и собранные библиотеки) выступает как единый неразрывный комплекс. Твой системный qmake всегда будет лезть в /usr/include за хедерами и в /usr/lib за либами.