Rasberrypi&Qt cross compilation 本以為樹莓派這么受歡迎,大家應該把開發(fā)樹莓派中遇到的問題解決的差不多。但遇到一個又一個問題,解決一個又一個,心累啊,最終還是把環(huán)境搭建好了。ps:加入到某些樹莓派qq群,本以為有大神能夠幫忙,結果,進去后剛問問題,所謂的大神就說 新手??! 怎么啟動的程序……,等我把問題說清楚,全都啞巴了! 1 樹莓派安裝qt5&qtcreator–>pc交叉編譯對應版本的qt源碼–>配置pc端的qtcreator–>測試 準備 樹莓派2B+ 系統(tǒng)是 2016-09-23-raspbian-jessie.img,該版本支持apt-get方式安裝qt,目前是5.3.2版本。 低版本升級或者重新燒制系統(tǒng)(格式化后重新分區(qū),徹底清理干凈sd卡,否則會發(fā)生意想不到的結果) 概覽 樹莓派 1、系統(tǒng)燒制、驅動安裝 2、樹莓派安裝qt-default(qt5.3.2) 和 qtcreator PC(ubuntu16.04) 1、QT官方教程:交叉編譯qt5.3.2要和樹莓派版本對應 2、qtcreator arm工具及配置,及遠程部署 3、 忽略這一步—————最終,我們將掛載的鏡像燒到sd卡,啟動系統(tǒng)后,就可以直接使用qt5了。所以編譯的qt5的庫就在掛載的鏡像中,我們只需把它拷到樹莓派上,再設置環(huán)境變量,就應該能用了。qt5庫位置:/mnt/rasp-pi-rootfs/usr/local/qt5pi 問題匯總 1、make階段的符號鏈接問題 undefined reference to `__dlopen’等問題的解決方案 2、文件不匹配的問題,重新獲取源碼github或者qt官網 3、如果哪天qtcreator編譯樹莓派程序時,發(fā)生丟失文件的錯誤。請先確認是否未掛載樹莓派 sudo mkdir /mnt/rasp-pi-rootfs sudo mount -o loop,offset=62914560 2015-05-05-raspbian-wheezy.img /mnt/rasp-pi-rootfs 4、啟動樹莓派后,不能正常驅動鍵盤、3.5LCD顯示器。格式化SD卡重新分區(qū),燒制系統(tǒng)。 樹莓派上安裝qt5 要求安裝的系統(tǒng)是jessie 安裝qt&qtcreator sudo apt-get install qt-default//目前是qt5.3.2 sudo apt-get install qtcreator//安裝完這一步,qt程序的界面才啟動起來 交叉編譯教程 QT官方教程:交叉編譯 官方教程的翻譯 簡單說一下流程 準備 rasberrypi jessie鏡像 qt交叉編譯工具鏈(按照官方教程做就可以) qt5.3.2源碼 on qt official site qt5.3.2源碼on github 32位運行庫(如果你的系統(tǒng)是64位的) 編譯 掛載樹莓派(百度jessie掛載即可//交叉編譯時會使用樹莓派的庫和工具,以后qtcreator程序時,也會用到系統(tǒng)中的文件) sudo mkdir /mnt/rasp-pi-rootfs sudo mount -o loop,offset=62914560 2015-05-05-raspbian-wheezy.img /mnt/rasp-pi-rootfs 1 2 矯正系統(tǒng)鏈接和庫路徑(是用的是掛載的樹莓派文件;文件位置~/opt,如果更改,請對應) cd ~/opt/cross-compile-tools sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc 1 2 配置make cd ~/opt/cross-compile-tools sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc 1 2 make&install make -j 4 //這步會發(fā)生符號鏈接問題,見下 sudo make install //安裝到掛載的樹莓派系統(tǒng)中。 1 2 燒制鏡像到SD卡(現在不使用該步驟,直接在樹莓派上以apt-get方式安裝qt-default和qtcreator) 最終,我們將掛載的鏡像燒到sd卡,啟動系統(tǒng)后,就可以直接使用qt5了。所以編譯的qt5的庫就在掛載的鏡像中,我們只需把它拷到樹莓派上,再設置環(huán)境變量,就應該能用了。qt5庫位置:/mnt/rasp-pi-rootfs/usr/local/qt5pi 注意事項 交叉編譯前最好不要使用過QT,或者重啟機器后交叉編譯,不要啟動qtcreator等 如果不按照官方教程的文件結構,請將文件結構對應準確 關于安裝32庫 sudo apt-get install ia32-libs //如果無法定位ia32-libs嘗試安裝下列內容,或者安裝時提示的軟件 lib32z1 lib32ncurses5 lib32bz2-1.0 1 2 PC上的其他配置 qtcreator 配置,所需要工具均在編譯源碼的目錄下 遠程部署 遇到的問題及解決方案 make階段的符號鏈接問題 按照官方教程正確操作后,出現undefined reference to `__dlopen’等問題,顯示內容如下 qlibrary_unix.cpp:(.text+0x1330): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlopen.o): In function `dlopen': (.text+0xc): undefined reference to `__dlopen' /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlclose.o): In function `dlclose': (.text+0x0): undefined reference to `__dlclose' /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlsym.o): In function `dlsym': (.text+0xc): undefined reference to `__dlsym' /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libdl.a(dlerror.o): In function `dlerror': (.text+0x0): undefined reference to `__dlerror' /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libm.a(feholdexcpt.o): In function `feholdexcept': (.text+0x48): undefined reference to `_dl_hwcap' /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libm.a(fesetenv.o): In function `fesetenv': (.text+0x64): undefined reference to `_dl_hwcap' collect2: error: ld returned 1 exit status Makefile:1215: recipe for target '../../lib/libQt5Core.so.5.5.1' failed make[2]: *** [../../lib/libQt5Core.so.5.5.1] Error 1 make[2]: Leaving directory '/home/liu/bin/opt/qt5/qtbase/src/corelib' Makefile:170: recipe for target 'sub-corelib-make_first' failed make[1]: *** [sub-corelib-make_first] Error 2 make[1]: Leaving directory '/home/liu/bin/opt/qt5/qtbase/src' Makefile:45: recipe for target 'sub-src-make_first' failed make: *** [sub-src-make_first] Error 2 解決方案 軟連接不對,重建兩個軟連接,均在掛載的樹莓派鏡像上。如果已經存在該軟鏈接,先刪除再創(chuàng)建。 //最終,我們將掛載的鏡像燒到sd卡,啟動系統(tǒng)后,就可以直接使用qt5了,所以編譯的qt5的庫就在掛載的鏡像中,我們只需把它拷到樹莓派上,再設置環(huán)境變量,就應該能用了。 sudo ln -s /mnt/rasp-pi-rootfs/lib/arm-linux-gnueabihf/libdl-2.13.so /mnt/rasp-pi-rootfs/lib/arm-linux-gnueabihf/libdl.so sudo ln -s /mnt/rasp-pi-rootfs/lib/arm-linux-gnueabihf/libm-2.13.so /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libm.so 1 2 3 出現上述問題的原因 1 in that case the fixQualifiedLibraryPaths won’t help you as it can’t find the symlinks. Copying libdl.so and libm.so might also fail, for example, if you use a flash drive to copy data from your existing Raspberry Pi, it won’t copy them as symlinks, but will copy the libraries themselves. However, for the build to succeed, it seems to require symlinks. 沒有找到文件問題 在make 時發(fā)生如下問題 /vc/lib -L/home/liu/bin/opt/qt5/qtlocation/lib -lQt5Location -L/home/liu/bin/opt/qt5/qtbase/lib -L/home/liu/bin/opt/qt5/qtdeclarative/lib -lQt5Quick -lQt5Gui -lQt5Qml -lQt5Network -lQt5Positioning -lQt5Core -lGLESv2 -lpthread -lpoly2tri /home/liu/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lpoly2tri collect2: error: ld returned 1 exit status Makefile:281: recipe for target '../../../qml/QtLocation/libdeclarative_location.so' failed make[4]: *** [../../../qml/QtLocation/libdeclarative_location.so] Error 1 make[4]: Leaving directory '/home/liu/bin/opt/qt5/qtlocation/src/imports/location' Makefile:80: recipe for target 'sub-location-install_subtargets' failed make[3]: *** [sub-location-install_subtargets] Error 2 make[3]: Leaving directory '/home/liu/bin/opt/qt5/qtlocation/src/imports' Makefile:135: recipe for target 'sub-imports-install_subtargets' failed make[2]: *** [sub-imports-install_subtargets] Error 2 make[2]: Leaving directory '/home/liu/bin/opt/qt5/qtlocation/src' Makefile:56: recipe for target 'sub-src-install_subtargets' failed make[1]: *** [sub-src-install_subtargets] Error 2 make[1]: Leaving directory '/home/liu/bin/opt/qt5/qtlocation' Makefile:366: recipe for target 'module-qtlocation-install_subtargets' failed make: *** [module-qtlocation-install_subtargets] Error 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 解決辦法其原因可能是,make配置文件和源文件不匹配造成的,請重新獲取源碼,重新編譯。 啟動不出來qt界面問題 問題描述:在終端啟動程序后,測試字符都已經顯示,但圖形渲染沒有出現。因為這個為題讓我,真正工作了三天??! 解決方案 樹莓派上安裝qt-default其版本是5.3.2,交叉編譯時請編譯對應版本。安裝qtcreator,再啟動測試demo時圖形界面就渲染出來了。 樹莓派上啟動qt程序發(fā)現不了設備等,百度即可 遠程部署測試結果 引用鏈接 debian7 wheezy升級到debian8 jessie rasberrypi jessie鏡像 安裝qt5 樹莓派安裝QT5 qt5.3.2源碼 on qt official site qt5.3.2源碼on github QT官方教程:交叉編譯 官方教程的翻譯 undefined reference to `__dlopen’等問題的解決方案 qtcreator配置 Issues with Qt5 apps 移植qt之更改分辨率 配置無線驅動 fdisk分區(qū) 樹莓派2安裝使用小米WIfi(360 小度 騰訊wifi) 微雪3.5inch LCD安裝教程含驅動 如何使用手機作為樹莓派的“屏幕”教程 scp傳輸文件 軟件定義硬件,使用js開發(fā)硬件程序 ———————————————— 版權聲明:本文為CSDN博主「longtails」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/scylhy/article/details/52818779
|
|