Qt:qt-everywhere-opensource-src-4.6.0.tar.gz 嵌入式平臺(tái):2440 arm-linux-gcc:4.1.2,下載(我用4.3.2和4.4.1版本時(shí),移植時(shí)都有段錯(cuò)誤。我把它放在:/usr/local/arm/4.1.2/ 。) 將 qt-everywhere-opensource-src-4.6.0.tar.gz 壓縮包解壓為3份,分別編譯 PC ,嵌入式 x86 和 arm 三個(gè)版本。 1. 編譯 PC 版: $ ./configure $ make # make install 2. 編譯嵌入式x86版: $ ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb $ make # make install 編譯安裝PC版中的 qvfb: $ cd ***/qt-everywhere-opensource-src-4.6.0/tools/qvfb $ make # cp ***/qt-everywhere-opensource-src-4.6.0/bin/qvfb /usr/local/Trolltech/QtEmbedded-4.6.0/bin 3. 編譯嵌入式arm版(需要 arm-linux-gcc 的支持): 編譯tslib對(duì)觸摸屏支持: 下載,tslib1.4.tar.gz,解壓后: $ ./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes $ make # make install 設(shè)置環(huán)境變量,以便編譯時(shí)找到相關(guān)的庫(kù): $ export CPLUS_INCLUDE_PATH=/usr/local/arm/4.1.2/arm-angstrom-linux-gnueabi/include/c++:/usr/local/arm/4.1.2/arm-angstrom-linux-gnueabi/include/c++/arm-angstrom-linux-gnueabi 配置: $ ./configure \ -opensource \ -confirm-license \ -release -shared \ -embedded arm \ -xplatform qws/linux-arm-g++ \ -depths 16,18,24 \ -fast \ -optimized-qmake \ -pch \ -qt-sql-sqlite \ -qt-libjpeg \ -qt-zlib \ -qt-libpng \ -qt-freetype \ -little-endian -host-little-endian \ -no-qt3support \ -no-libtiff -no-libmng \ -no-opengl \ -no-mmx -no-sse -no-sse2 \ -no-3dnow \ -no-openssl \ -no-webkit \ -no-qvfb \ -no-phonon \ -no-nis \ -no-opengl \ -no-cups \ -no-glib \ -no-xcursor -no-xfixes -no-xrandr -no-xrender \ -no-separate-debug-info \ -nomake examples -nomake tools -nomake docs \ -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib 配置結(jié)果: Debug ............... no Qt 3 compatibility .. no QtDBus module ....... no QtConcurrent code.... yes QtScript module ..... yes QtScriptTools module yes QtXmlPatterns module no Phonon module ....... no Multimedia module ... yes SVG module .......... yes WebKit module ....... no Declarative module .. no STL support ......... no PCH support ......... yes MMX/3DNOW/SSE/SSE2.. no/no/no/no iWMMXt support ...... no IPv6 support ........ yes IPv6 ifname support . yes getaddrinfo support . yes getifaddrs support .. yes Accessibility ....... yes NIS support ......... no CUPS support ........ no Iconv support ....... no Glib support ........ no GStreamer support ... auto Large File support .. yes GIF support ......... plugin TIFF support ........ no JPEG support ........ plugin (qt) PNG support ......... yes (qt) MNG support ......... no zlib support ........ yes Session management .. no Embedded support .... arm Freetype2 support ... yes Graphics (qt) ....... linuxfb multiscreen Graphics (plugin) ... Decorations (qt) .... styled windows default Decorations (plugin) Keyboard driver (qt). tty Keyboard driver (plugin) Mouse driver (qt) ... pc linuxtp tslib Mouse driver (plugin) OpenGL support ...... no OpenVG support ...... no SQLite support ...... qt (qt) OpenSSL support ..... no alsa support ........ yes 編譯:$ make 如果出錯(cuò): /usr/local/arm/4.1.2/bin/../lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/bin/ld: warning: libts-0.0.so.0, needed by /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so, not found (try using -rpath or -rpath-link) /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_read_raw' /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_open' /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_fd' /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_config' /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_close' /home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/lib/libQtGui.so: undefined reference to `ts_read' collect2: ld returned 1 exit status make[2]: *** [deform] Error 1 make[2]: Leaving directory `/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/demos/deform' make[1]: *** [sub-deform-make_default] Error 2 make[1]: Leaving directory `/home/stillwater/4.1.2/qt-everywhere-opensource-src-4.6.0/demos' make: *** [sub-demos-make_default-ordered] Error 2 解決辦法: 修改qt-everywhere-opensource-src-4.6.0/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts參數(shù)): QMAKE_CC = arm-linux-gcc -lts QMAKE_CXX = arm-linux-g++ -lts QMAKE_LINK = arm-linux-g++ -lts QMAKE_LINK_SHLIB = arm-linux-g++ -lts 參考:http://74.125.153.132/search?q=cache:3WzcJeRRj4sJ:nckuhuahua.pixnet.net/blog/post/30066956+libQtGui.so:+undefined+reference+to+%60ts_read%27&cd=3&hl=en&ct=clnk&client=iceweasel-a 添加環(huán)境變量:# export PATH=/usr/local/arm/4.1.2/bin:$PATH 安裝:# make install-strip 安裝完成后,在 /usr/local/Trolltech 目錄中有三個(gè)文件夾:Qt-4.6.0、QtEmbedded-4.6.0、QtEmbedded-4.6.0-arm。 測(cè)試嵌入式 x86 : $ source ~/.setenv-qt-x86.sh $ qvfb -width 800 -height 600 & $ /usr/local/Trolltech/QtEmbedded-4.6.0/demos/books/books -qws 4、編寫環(huán)境變量設(shè)置文件(方便不同環(huán)境切換): PC 機(jī)的~/.bashrc 中添加: export PATH=$PATH:/usr/local/arm/4.1.2/bin ~/.setenv-qt-x11.sh(對(duì)應(yīng)于PC版Qt): PATH=/usr/local/Trolltech/Qt-4.6.0/bin:$PATH LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.6.0/lib:$LD_LIBRARY_PATH CPLUS_INCLUDE_PATH= ~/.setenv-qt-x86.sh: QTEDIR=/usr/local/Trolltech/QtEmbedded-4.6.0 PATH=/usr/local/Trolltech/QtEmbedded-4.6.0/bin:$PATH LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.6.0/lib:$LD_LIBRARY_PATH ~/.setenv-qt-arm.sh: QTEDIR=/usr/local/Trolltech/QtEmbedded-4.6.0-arm PATH=/usr/local/Trolltech/QtEmbedded-4.6.0-arm/bin:$PATH LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.6.0-arm/lib:$LD_LIBRARY_PATH CPLUS_INCLUDE_PATH=/usr/local/arm/4.1.2/arm-angstrom-linux-gnueabi/include/c++:/usr/local/arm/4.1.2/arm-angstrom-linux-gnueabi/include/c++/arm-angstrom-linux-gnueabi:$CPLUS_INCLUDE_PATH 5、移植 將 PC 機(jī)上 /usr/local/Trolltech/QtEmbedded-4.6.0-arm/lib 中的庫(kù)復(fù)制到2440的 /usr/local/Trolltech/QtEmbedded-4.6.0-arm/lib(對(duì)應(yīng)目錄復(fù)制)。 將 PC 機(jī)上 /usr/local/tslib 中的庫(kù)復(fù)制到2440的 /usr/local 。 如果運(yùn)行時(shí)還缺少其他的庫(kù),復(fù)制方法相同。 為支持觸摸屏,開機(jī)自動(dòng)設(shè)置環(huán)境變量,在2440的 /etc/profile中追加: export LD_LIBRARY_PATH=/usr/local/lib:$QTDIR/lib:$LD_LIBRARY_PATH export TSLIB_ROOT=/usr/local/lib export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_PLUGINDIR=/usr/local/lib/ts export TSLIB_CONSOLEDEVICE=none export TSLIB_CONFFILE=/usr/local/etc/ts.conf export POINTERCAL_FILE=/etc/pointercal export TSLIB_CALIBFILE=/etc/pointercal export QWS_MOUSE_PROTO=Tslib:/dev/input/event0 注:可用$ cat /dev/input/event0 測(cè)試觸摸屏 取消/usr/local/etc/ts.conf中的第一個(gè)注釋: # module_raw input (去掉#,并且該行頂格) 運(yùn)行 /usr/local/bin/ts_calibrate 校正觸摸屏。 6、程序編譯: PC版: $ make distclean $ source ~/.setenv-qt-x11.sh $ qmake $ make arm 版: $ make distclean $ source ~/.setenv-qt-arm.sh $ qmake $ make 參考: http://blog./gurongjiang/352778/Message.aspx Fedora12下搭建Qt Creator的ARM開發(fā)環(huán)境 并 移植Qt4.6.2到Micro2440(一)Fedora12下搭建Qt Creator的ARM開發(fā)環(huán)境 并 移植Qt4.6.2到Micro2440(一)
參考:
環(huán)境:虛擬機(jī)Fedora12(建議安裝Vmware Tools,詳細(xì)安裝方法參照Vmware幫助文檔),USB串口,minicom終端。(minicom經(jīng)常打不開ttyUSB0設(shè)備,我的解決方法是,打不開時(shí)就將USB串口移除,運(yùn)行minicom,然后再接上USB串口,此時(shí)運(yùn)行minicom一般都能打開設(shè)備)
軟件準(zhǔn)備:
到http://qt./downloads-cn下載最新版的軟件包,當(dāng)前是:
用于 Linux/X11 32位 的 Qt Creator 1.3.1 二進(jìn)制軟件包qt-creator-linux-x86-opensource-1.3.1.bin(http://qt./downloads/qt-creator-binary-for-linux-x11-32-bit)
用于嵌入式 Linux 的 Qt 庫(kù) 4.6.2包qt-everywhere-opensource-src-4.6.2.tar.gz(http://qt./downloads/embedded-linux-cpp)
到http://hi.baidu.com/jiyeqian/blog/item/f46d26a2ff3f7da6caefd0d6.html下載arm920t-eabi.tgz(即arm-linux-gcc-4.1.2)(http:///downloads/toolchains/arm920t-eabi.tgz)
到http://www./download.asp下載Root_Qtopia,我用的是友善光盤里的root_qtopia-20100108.tar.gz(http://www./linux/root_qtopia-20100108.tar.gz)
下載tslib1.4,這個(gè)忘了在哪下載的了,網(wǎng)上有很多,有些不能用,大家自己找個(gè)能用的吧。
將 qt-everywhere-opensource-src-4.6.2.tar.gz 壓縮包解壓為3份,分別編譯 PC ,嵌入式 x86 和 arm 三個(gè)版本。
我在root目錄下建立tmp文件夾,將qt-everywhere-opensource-src-4.6.2.tar.gz直接解壓后復(fù)制2分,分別命名為pc、x86、arm。
1. 編譯 PC 版:
進(jìn)入pc目錄
#./configure
#
gmake
# gmake
install
安裝過程比較長(zhǎng),沒有碰到過錯(cuò)誤。
2. 編譯嵌入式x86版:
進(jìn)入x86目錄
# ./configure
-embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
#
gmake
# gmake
install
安裝過程比較長(zhǎng),沒有碰到過錯(cuò)誤。
編譯安裝PC版中的 qvfb:
進(jìn)入pc/tools/qvfb/目錄
#make
編譯完畢,將pc/bin目錄下的qvfb文件復(fù)制到/usr/local/Trolltech/QtEmbedded-4.6.2/bin目錄。
3. 編譯嵌入式arm版(需要 arm-linux-gcc 的支持):
使用友善自帶的ARM-Linux GCC 4.3.2編譯完了,程序移植到開發(fā)板上后,出現(xiàn)Segmentation
Fault錯(cuò)誤,按原文,使用4.1.2正常。
直接將arm920t-eabi.tgz解壓縮到根目錄,不可以像文章中說的那樣“我把它放在:/usr/local/arm/4.1.2/ ”,最起碼我放過去后出錯(cuò)了。
把編譯器路徑加入系統(tǒng)環(huán)境變量,運(yùn)行命令:
#gedit /root/.bashrc
編輯/root/.bashrc文件,在最后一行加上 export
PATH=/opt/toolchains/arm920t-eabi/bin:$PATH 編譯tslib對(duì)觸摸屏支持:
下載,tslib1.4.tar.gz,解壓后:
# ./configure
--prefix=/usr/local/tslib/ --host=arm-linux
ac_cv_func_malloc_0_nonnull=yes
# make
# make
install
我下載的包解壓后沒有configure文件,需要運(yùn)行autogen.sh后才能生成。
配置:
必須加上“-prefix
/usr/local/Trolltech/QtEmbedded-4.6.2-arm ”參數(shù), 不然安裝后不在QtEmbedded-4.6.2-arm文件夾下,而是覆蓋了QtEmbedded-4.6.2。
# ./configure
\
-prefix /usr/local/Trolltech/QtEmbedded-4.6.2-arm \
-opensource
\
-confirm-license
\
-release -shared
\
-embedded arm
\
-xplatform
qws/linux-arm-g++ \
-depths 16,18,24
\
-fast
\
-optimized-qmake
\
-pch
\
-qt-sql-sqlite
\
-qt-libjpeg
\
-qt-zlib
\
-qt-libpng
\
-qt-freetype
\
-little-endian
-host-little-endian \
-no-qt3support
\
-no-libtiff
-no-libmng \
-no-opengl
\
-no-mmx -no-sse
-no-sse2 \
-no-3dnow
\
-no-openssl
\
-no-webkit
\
-no-qvfb
\
-no-phonon
\
-no-nis
\
-no-opengl
\
-no-cups
\
-no-glib
\
-no-xcursor
-no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-nomake examples
-nomake tools -nomake docs \
-qt-mouse-tslib
上面劃掉的藍(lán)色內(nèi)容,可以不要的,這樣編輯也不會(huì)出錯(cuò)(虛擬機(jī)搞壞了,不得已重裝,配置參數(shù)時(shí)忘了干上面的工作了,結(jié)果發(fā)現(xiàn)沒出錯(cuò))。
關(guān)于配置參數(shù),參照一下這篇文章吧,可以用configure -embedded
–help查看。
http://www./blog/?p=582
如果你放棄配置,則使用命令:# gmake confclean
編譯:# gmake
安裝:# gmake install
安裝完成后,在 /usr/local/Trolltech 目錄中有三個(gè)文件夾:Qt-4.6.2、QtEmbedded-4.6.2、QtEmbedded-4.6.2-arm。
4、移植
我是通過NFS啟動(dòng)的系統(tǒng),具體操作可以參照友善的手冊(cè),在http://www./download.asp有下載,在第5.5.3節(jié)通過NFS啟動(dòng)系統(tǒng)。
將Fedora12上 /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib
中的所有文件復(fù)制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib目錄中(對(duì)應(yīng)目錄復(fù)制,相當(dāng)于復(fù)制到了開發(fā)板對(duì)應(yīng)目錄中),其實(shí)需要的時(shí)候可以裁剪,看原文吧。
將Fedora12上 /usr/local/tslib 中的庫(kù)復(fù)制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local中。即將/usr/local/tslib下的所有文件復(fù)制到/opt/FriendlyARM/mini2440/root_qtopia/usr/local文件夾下。
如果運(yùn)行時(shí)還缺少其他的庫(kù),復(fù)制方法相同。也可以使用arm-angstrom-linux-gnueabi-readelf -a 程序名 | grep "Share",命令查看需要哪些共享庫(kù),一起復(fù)制過去。
為支持觸摸屏,開機(jī)自動(dòng)設(shè)置環(huán)境變量,在2440的 /etc/profile中追加:
export
LD_LIBRARY_PATH=/usr/local/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export
TSLIB_ROOT=/usr/local/lib
export
TSLIB_TSDEVICE=/dev/input/event0
export
TSLIB_FBDEVICE=/dev/fb0
export
TSLIB_PLUGINDIR=/usr/local/lib/ts
export
TSLIB_CONSOLEDEVICE=none
export
TSLIB_CONFFILE=/usr/local/etc/ts.conf
export
POINTERCAL_FILE=/etc/pointercal
export
TSLIB_CALIBFILE=/etc/pointercal
export
QWS_MOUSE_PROTO=Tslib:/dev/input/event0
取消/usr/local/etc/ts.conf中的第一個(gè)注釋:
# module_raw input
(去掉#,并且該行頂格)
我編輯時(shí)沒有“#”
啟動(dòng)Micro2440運(yùn)行 /usr/local/bin/ts_calibrate 校正觸摸屏。
到此Qt4.6.2的移植暫告一段落,移植還沒有完,此時(shí)如果在開發(fā)板上運(yùn)行Qt4.6.2-arm編譯的程序,則會(huì)出現(xiàn)“relocation error:
/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf,
version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time
reference”錯(cuò)誤。
今天晚了,明天繼續(xù)奉上…… |
|