最近在編譯安裝qt-everywhere-4.7.4,在配置tslib的時候總是出現錯誤。經過思考和百度,終於找到了解決方法。
我的安裝環境是:
使用系統:ubuntu 14.04
編譯器: arm-linux-gcc 4.3.2 目錄在/usr/local/arm/4.3.2/
tslib版本:tslib-1.4 目錄在/home/hero/work/tslib-1.4
qt版本: qt-everywhere-4.7.4 目錄在/home/hero/work/qtarm-build
首先編譯安裝tslib,進入到tslib-1.4的目錄,執行./autogen-clean.sh做一下清理,之後執行./autogen.sh生成相關文件。
然後echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache;
之後執行./configure --host=arm-linux --prefix=/home/hero/work/tslib --cache-file=arm-linux.cache
接下來就是make和make install
最後修改安裝目錄下/etc/ts.conf文件,例如我的路徑就是 vi /home/hero/work/tslib/etc/ts.conf。將第二行
<span style="font-family: 'Liberation Mono', monospace; font-size: 18px;"><span lang="en-US">module_rawinput前面的井號“#”和空格刪除,注意,前面一定定格。最後改完的結果是有如下配置 </span></span><pre class="cjk" name="code" style="white-space: pre-wrap; word-wrap: break-word;"><span style="font-family: 'Liberation Mono', monospace;"><span lang="en-US">module_rawinput</span></span>
<span style="font-family: 'Liberation Mono', monospace;"><span lang="en-US">modulepthres pmin=1</span></span>
<span style="font-family: 'Liberation Mono', monospace;"><span lang="en-US">modulevariance delta=30</span></span>
<span style="font-family: 'Liberation Mono', monospace;"><span lang="en-US">moduledejitter delta=100</span></span>
<span style="font-family: 'Liberation Mono', monospace;"><span lang="en-US">modulelinear</span></span>
說明:
1、如果不添加echo"ac_cv_func_malloc_0 _nonnull=yes">arm-linux.cache會報錯:
ts_test.o: In function `main':
ts_test.c:(.text+0x1d8): undefinedreference to `rpl_malloc'
fbutils.o: In function`open_framebuffer':
fbutils.c:(.text+0xa20): undefinedreference to `rpl_malloc'
2、--prefix項是指定tslib的安裝路徑,在make install之前要手動創建相關文件夾,例如我的安裝路徑中,tslib
目錄就是我自己創建出來的。
到此tslib就安裝結束了。
下一步是配置安裝qt4.7.4。關於配置選項我自己也沒弄的太懂,不過編譯後的程序可以在arm上面運行。具體
的配置選項以後有時間慢慢研究吧。進入正題:
解壓什麼的我就不說了。不解壓也就談不上配置了。
進入qt4.7.4目錄,我的文件加/home/hero/work/qtarm-build。進入qtarm-build目錄以後我創建了一個腳本文件build.sh,如下
- <span style="font-size:18px;">./configure --prefix=/home/hero/work/qt-arm \
- -embedded arm \
- -release \
- -opensource \
- -fast \
- -no-accessibility \
- -no-scripttools \
- -no-mmx \
- -no-multimedia \
- -no-svg \
- -no-webkit \
- -no-3dnow \
- -no-sse \
- -no-sse2 \
- -silent \
- -qt-libpng \
- -qt-libjpeg \
- -no-libtiff \
- -no-multimedia \
- -make libs \
- -nomake tools \
- -nomake examples \
- -nomake docs \
- -nomake demo \
- -no-nis \
- -no-cups \
- -no-iconv \
- -no-dbus \
- -no-openssl \
- -xplatform qws/linux-arm-g++ \
- -little-endian \
- -qt-freetype \
- -depths 4,8,16,32 \
- -no-glib \
- -qt-mouse-tslib -I<span style="color:#FF0000;">/home/hero/work/tslib/include</span> -L<span style="color:#FF0000;">/home/hero/work/tslib/lib</span> </span>
紅色部分是tslib的安裝路徑,這個必須和tslib安裝路徑一樣,不然會提示配置錯誤:
The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/home/hero/work/qtarm-build/mkspecs/qws/linux-arm-g++.
在qtarm-build目錄下更改mkspecs/qws/linux-arm-g++/qmake.conf文件。
- <span style="font-size:18px;">#
- # qmake configuration for building with arm-linux-g++
- #
- include(../../common/g++.conf)
- include(../../common/linux.conf)
- include(../../common/qws.conf)
- # modifications to g++.conf
- QMAKE_CC = <span style="color:#3366FF;">/usr/local/arm/4.3.2/bin/</span>arm-linux-gcc <span style="color:#FF0000;">-lts</span>
- QMAKE_CXX = <span style="color:#3333FF;">/usr/local/arm/4.3.2/bin/</span>arm-linux-g++ <span style="color:#FF0000;">-lts</span>
- QMAKE_LINK = <span style="color:#3333FF;">/usr/local/arm/4.3.2/bin/</span>arm-linux-g++ <span style="color:#FF0000;">-lts</span>
- QMAKE_LINK_SHLIB = <span style="color:#6600CC;">/usr/local/arm/4.3.2/bin/</span>arm-linux-g++ <span style="color:#FF0000;">-lts</span>
- # modifications to linux.conf
- QMAKE_AR = <span style="color:#3333FF;">/usr/local/arm/4.3.2/bin/</span>arm-linux-ar cqs
- QMAKE_OBJCOPY = <span style="color:#000099;">/usr/local/arm/4.3.2/bin/</span>arm-linux-objcopy
- QMAKE_STRIP = <span style="color:#3333FF;">/usr/local/arm/4.3.2/bin/</span>arm-linux-strip
- load(qt_config)</span>
紅色部分是需要重新添加的,注意前面有空格,藍色部分是因爲我自己的環境變量設置的有問題,所以添加了
絕對路徑,如果環境變量設置的沒問題,可以不用添加。
然後就是到qtarm-build目錄運行之前創建的腳本文件。執行./build.sh,出現提示,輸入yes開始配置。如果qt4.7.4
是從官方網站下載的,應該可以正確配置。如果是經過別人修改過的,有可能還是提示:
The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/home/Raymond/qt-embedded-arm-tslib/mkspecs/qws/linux-arm-g++.
我就是後者,折騰了我很久,才找到解決辦法,網上有人說是找不到arm-linux-gcc也會報這樣的錯誤,那就按照我上面的藍色自體部分,添加編譯器的絕對路徑。如果是其實是你安裝的tslib位置,和你在腳本文件中配置的不一樣,那請自行更改。最坑人的是,這兩個都不是,而是出現在config.test這個文件夾下面。如果這個qt曾經被編譯過,就可能出現這個問題。你可以去到config.test/unix/tslib目錄下,查看一下里面的Makefile文件,看看裏面的關於tslib的路徑是不是你自己的安裝路徑。如果不是,直接在這裏更改即可,然後在回到qtarm-build目錄。重新配置,即可通過。
我也試過先去掉關於tslib的選項,可以配置過去,這時會提示你可以執行make confclean來清除之前的配置項,我弱弱的以爲,這就可以清除所有的配置項。很傻很天真啊。這樣qt應該就可以正確無誤的配置過去了。
然後就是make 和 make install了。到此我心裏的大石頭終於落地了,小弟菜鳥一枚,如有錯誤歡迎指正,一起討論。