在樹莓派(Raspberry Pi)上Qt5的本地構建
首先從獲得最新版本的Raspbian或5月23日版本(我用於本教程的版本)開始。您至少需要一張16GB的SD卡,因為所需的空間有點超過4GB(8G SD卡可能不夠用)。還要確保您使用的是具有512MB RAM的B型或B型。早期的樹莓派裝有256 MB的RAM,這是不夠的,並會導致gcc錯誤。
開啟Raspberry Pi並登入。確保它已正確連線到網際網路,並且您的電源至少為1A。你可能也想超頻你的Pi。我以900 MHz的頻率超頻,花了38個小時編譯,溫度穩定在51 C - 54 C(帶外殼,沒有散熱片,沒有風扇)。
安裝編譯所需的軟體包:
sudo apt-get update sudo apt-get upgrade sudo apt-get install libfontconfig1-dev libdbus-1-dev libfreetype6-dev libudev-dev libicu-dev libsqlite3-dev libxslt1-dev libssl-dev libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad libraspberrypi-dev libpulse-dev libx11-dev libglib2.0-dev libcups2-dev freetds-dev libsqlite0-dev libpq-dev libiodbc2-dev libmysqlclient-dev firebird-dev libpng12-dev libjpeg9-dev libgst-dev libxext-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxi-dev libdrm-dev libssl-dev libxcb-xinerama0 libxcb-xinerama0-dev
2017年3月23日更新:對於PI3,使用最新版本的Raspbian(4.4.5),彙編需要過夜。
然後讓你的構建目錄:
mkdir ~/opt
cd ~/opt
從git中檢索qt5原始碼:
git clone git://code.qt.io/qt/qt5.git
檢索其他元件的git原始碼
cd qt5
./init-repository
不要應用任何可用的補丁。 最新的Qt5不再需要它們。 git原始碼應該在配置引數中使用一些技巧進行編譯,而不需要任何補丁。首先確保你在qt5目錄中。
cd ~/opt/qt5
為了使配置指令碼正確構建所有的Makefiles,您需要調整〜/opt/qt5/qtbase/configure指令碼。使用您最喜歡的文字編輯器(vim,nano,emacs),並在〜/opt/qt5/qtbase/configure指令碼(搜尋QT_CFLAGS_DBUS)中更改/新增以下程式碼:
# flags for raspberry pi build # flags for libdbus-1 QT_CFLAGS_DBUS="-I/usr/include/dbus-1.0/ -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include/" QT_LIBS_DBUS=-ldbus-1 # flags for Glib (X11 only) QT_CFLAGS_GLIB="-I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/" QT_LIBS_GLIB=-lglib-2.0 QT_CFLAGS_PULSEAUDIO="-I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/" QT_LIBS_PULSEAUDIO="-lpulse -lpulse-mainloop-glib" # flags for GStreamer (X11 only) QT_CFLAGS_GSTREAMER="-I/usr/include/gstreamer-0.10/ -I/usr/include/glib-2.0/ -I/usr/lib/arm-linux- gnueabihf/glib-2.0/include/ -I/usr/include/libxml2/" QT_LIBS_GSTREAMER=
然後在配置指令碼中關閉檔案搜尋QT_CFLAGS_FONTCONFIG之前。 它應該位於上面的條目下方,您需要將else語句中的條目更改為:
QT_CFLAGS_FONTCONFIG=-I/usr/include/freetype2/
如果上述更改很難遵循,則可以使用以下修補程式檔案:
1030,1031c1030,1031 < QT_CFLAGS_DBUS= < QT_LIBS_DBUS= — > QT_CFLAGS_DBUS="-I/usr/include/dbus-1.0/ -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include/" > QT_LIBS_DBUS=-ldbus-1 1034,1035c1034,1038 < QT_CFLAGS_GLIB= < QT_LIBS_GLIB= — > QT_CFLAGS_GLIB="-I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/" > QT_LIBS_GLIB=-lglib-2.0 > > QT_CFLAGS_PULSEAUDIO="-I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/" > QT_LIBS_PULSEAUDIO="-lpulse -lpulse-mainloop-glib" 1038c1041 < QT_CFLAGS_GSTREAMER= — > QT_CFLAGS_GSTREAMER="-I/usr/include/gstreamer-0.10/ -I/usr/include/glib-2.0/ -I/usr/lib/arm-linux- gnueabihf/glib-2.0/include/ -I/usr/include/libxml2/" 5123c5126 < QT_CFLAGS_FONTCONFIG= — > QT_CFLAGS_FONTCONFIG=-I/usr/include/freetype2/為了在Raspberry Pi上正確執行Qt5的配置,需要將CROSS_COMPILE變數指向位於/usr/bin/g++的本機編譯器。 CROSS_COMPILE引數是編譯器的路徑(不含g)。 如果你不這樣做,它會抱怨說它沒有被交叉編譯。
所有輸出儲存在稱為“輸出”的檔案中,以防出現問題。 在輸出檔案的末尾,應該說你可以執行'make',如果不在輸出結尾查詢錯誤。
不要擔心由於缺少軟體包而造成的某些事情不會發生,那些錯誤將會出現。 如果它沒有提到你可以執行make,然後檢查最後一個錯誤,它通常是顯示停止。 執行配置:
./configure -v -opengl es2 -device linux-rasp-pi-g''+ -device-option CROSS_COMPILE=/usr/bin/ -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs -prefix /usr/local/qt5 &> output2017年3月23日更新:對於帶有最新版Raspbian(4.4.5)的PI3,在預編譯標頭檔案時遇到問題,必須在./configure(在上面的程式碼中)中使用-no-pch引數。
檢查輸出檔案,看看它是在構建你需要的元件(在輸出結束時,它將在將要構建的Qt元件旁邊有Yes),並且應該說你現在可以執行'make'。
'輸出'檔案中的示例:
… Build options: Configuration ………. accessibility accessibility-atspi-bridge alsa audio-backend c+''11 clock-gettime clock-monotonic concurrent cross_compile cups dbus egl eglfs evdev eventfd fontconfig full-config getaddrinfo getifaddrs glib gstreamer iconv icu inotify ipv6ifname large-config largefile libudev linuxfb medium-config minimal-config mremap neon nis no-pkg-config opengl opengles2 openssl pcre png precompile_header pulseaudio qpa qpa reduce_exports reduce_relocations release rpath shared small-config system-freetype system-jpeg system-png system-zlib v8 v8snapshot xcb xcb-glx xcb-render xcb-xlib xinput2 xkbcommon-qt xlib xrender Build parts ………… libs Mode ………………. release Using C''+11 ………… yes Using PCH ………….. yes Target compiler supports: iWMMXt/Neon ………. no/yes Qt modules and options: Qt D-Bus …………… yes (loading dbus-1 at runtime) Qt Concurrent ………. yes Qt GUI …………….. yes Qt Widgets …………. yes JavaScriptCore JIT ….. yes (To be decided by JavaScriptCore) QML debugging ………. yes Use system proxies ….. no Support enabled for: Accessibility ………. yes ALSA ………………. yes CUPS ………………. yes FontConfig …………. yes Iconv ……………… yes ICU ……………….. yes Image formats: GIF ……………… yes (plugin, using system library) JPEG …………….. yes (plugin, using system library) PNG ……………… yes (in QtGui, using system library) Glib ………………. yes GStreamer ………….. yes GTK theme ………….. no Large File …………. yes libudev ……………. yes Networking: getaddrinfo ………. yes getifaddrs ……….. yes IPv6 ifname ………. yes OpenSSL ………….. yes (loading libraries at run-time) NIS ……………….. yes OpenGL …………….. yes (OpenGL ES 2.x) OpenVG …………….. no PCRE ………………. yes (bundled copy) pkg-config …………. no PulseAudio …………. yes QPA backends: DirectFB …………. no EGLFS ……………. yes KMS ……………… no LinuxFB ………….. yes XCB ……………… yes (system library) MIT-SHM ………… yes Xcursor ………… yes (loaded at runtime) Xfixes …………. yes (loaded at runtime) Xi …………….. no Xi2 ……………. yes Xinerama ……….. yes (loaded at runtime) Xrandr …………. yes (loaded at runtime) Xrender ………… yes XKB ……………. no XShape …………. yes XSync ………….. yes XVideo …………. yes Session management ….. yes SQL drivers: DB2 ……………… no InterBase ………… no MySQL ……………. yes (plugin) OCI ……………… no ODBC …………….. yes (plugin) PostgreSQL ……….. yes (plugin) SQLite 2 …………. yes (plugin) SQLite …………… yes (plugin, using bundled copy) TDS ……………… yes (plugin) udev ………………. yes xkbcommon ………….. yes (bundled copy) zlib ………………. yes (system library) NOTE: libxkbcommon 0.2.0 (or higher) not found on the system, will use the bundled version from 3rd party directory. Qt is now configured for building. Just run 'make'. Once everything is built, you must run 'make install'. Qt will be installed into /usr/local/qt5 Prior to reconfiguration, make sure you remove any leftovers from the previous build.
請注意,彙編將花費大約兩天的時間來編譯900 MHz超頻。 如果您遠端登入,請考慮使用byobu或螢幕,以便您可以分離會話。
然後,您需要按如下所示執行make(檢查output_make檔案中的錯誤):make &> output_make
如果那是好的,那麼執行make install(檢查output_make_install檔案中的錯誤):
sudo make install &> output_make_install
在此之後,你需要新增一些行到你的.bashrc檔案中:
export LD_LIBRARY_PATH=/usr/local/qt5/lib/ export PATH=/usr/local/qt5/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
您需要獲取.bashrc檔案來設定上述環境變數:
source ~/.bashrc
然後執行它並檢查它是否指向/usr/local/qt5/bin/qmake
which qmake
示例輸出:
[email protected] ~/opt/qt5 $ which qmake /usr/local/qt5/bin/qmake
在此之後,您應該能夠編譯示例應用程式並執行它們。 試試OpenGL Cube(我沒有在X視窗中測試過,只能從控制檯中):
cp -r~/opt/qt5/qtbase/examples/opengl/cube ~/ cd~/cube qmake make ./cube