好不容易花了三天的時間,把QT給編好了
編其實沒那麼難,難就難在要把它cross platform
以後做到嵌入式系統的學弟妹們啊,應該很有機會玩這個
不過印象中,除了我,還有黃信富學長(李國川老師第一屆學生)之外
系上好像沒有其他人有玩過這塊
趁現在剛弄好,記憶還深刻的時候把筆記打下來
有興趣的學弟妹可以私底下找我討論一下
本文開始:
1.下載原始碼
wget
http://download.qt.nokia.com/qt/source/qt-embedded-linux-opensource-src-4.5.3.tar.gz
2.解壓縮
tar zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
3.修改mkspecs/qws/linux-arm-g++/qmake.conf
# modifications to g++.conf
QMAKE_CC = arm-linux-gcc
QMAKE_CXX = arm-linux-g++
QMAKE_LINK = arm-linux-g++
QMAKE_LINK_SHLIB = arm-linux-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_STRIP = arm-linux-strip
4. 修改 ./src/corelib/io/qfilesystemwatcher_inotify.cpp 條件判斷
//# error "This architecture is not supported. Please talk to
qt-bugs@trolltech.com"
5.若要編入webkit,修改 ./src/3rdparty/webkit/JavaScriptCore/wtf/AlwaysInline.h
#ifndef ALWAYS_INLINE
//#if COMPILER(GCC) && defined(NDEBUG) && !COMPILER(MINGW)
//#define ALWAYS_INLINE inline __attribute__ ((__always_inline__))
//#elif COMPILER(MSVC) && defined(NDEBUG)
//#define ALWAYS_INLINE __forceinline
//#else
#define ALWAYS_INLINE inline
//#endif
#endif
6.進行configure
./configure -embedded arm -qt-zlib -qt-libpng -qt-gif -qt-libtiff -qt-libmng
-qt-libjpeg -qt-freetype -no-openssl
若需要tslib,則如下:
./configure -embedded arm -qt-zlib -qt-libpng -qt-gif -qt-libtiff -qt-libmng
-qt-libjpeg -qt-freetype -no-openssl -qt-mouse-tslib \
-L /home/septemhill/tslib-1.0/tslib/lib -I /home/simon/tslib-1.0/tslib/include
7.make & make install
其中有些地方需注意,若遇到錯誤為:
libQtWebKit.so: undefined reference to `trunc’
libQtWebKit.so: undefined reference to `lroundf’
libQtWebKit.so: undefined reference to `roundf’
libQtWebKit.so: undefined reference to `lround’
則需修改src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h,其中有一段
#if COMPILER(MSVC) || COMPILER(RVCT)
inline long lround(double num)
{ return static_cast(num > 0 ? num + 0.5 : ceil(num - 0.5)); }
inline long lroundf(float num)
{ return static_cast(num > 0 ? num + 0.5f : ceilf(num - 0.5f)); }
inline double round(double num)
{ return num > 0 ? floor(num + 0.5) : ceil(num - 0.5); }
inline float roundf(float num)
{ return num > 0 ? floorf(num + 0.5f) : ceilf(num - 0.5f); }
inline double trunc(double num)
{ return num > 0 ? floor(num) : ceil(num); }
#endif
直接將巨集的判斷註解掉即可
另外一點,uClibc-0.9.28之前的版本並無支援浮點數
若lib所用為此版本之前,則會有找不到「sinf、cosf、logf」等問題
此時只能重新編一套uClibc,且版本為0.9.28以上
筆記打完,拜拜。
--
▁▁
Google 女友|██████████████████▕搜尋▏進階搜尋 | 使用偏好
▇▇  ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄
搜尋: ⊙所有網頁 ○中文網頁○繁體中文網頁 ○台灣的網頁
所有網頁 約有0項符合女友的查詢結果,以下是第 0項。 共費21年。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.118.4.2