1. 程式人生 > >linux-ubuntu16.04 為樹莓派3B 交叉編譯qt5.9 心得

linux-ubuntu16.04 為樹莓派3B 交叉編譯qt5.9 心得

樹莓派3B  系統為2016.11.25的 jessie 

交叉編譯器版本:4.9.4

主機版本:ubuntu 16.04 64位

參考資料:https://www.ics.com/blog/building-qt-5-raspberry-pi 

 https://www.youtube.com/watch?v=I2vmh0dMzEw

http://blog.csdn.net/bona020/article/details/51398969

https://wiki.qt.io/RaspberryPi2EGLFS

qt下載地址:http://download.qt.io/archive/qt/

工具地址:https://github.com/conanwhf/RaspberryPi-script

gcc地址:https://releases.linaro.org/components/toolchain/binaries/

步驟:

1.首先更新樹莓派源,速度更快

/etc/apt/sources.list

#阿里雲
#Raspbian http://mirrors.aliyun.com/raspbian/raspbian/
deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main contrib non-free
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main contrib non-free
#清華大學
#Raspbian http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main contrib non-free
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main contrib non-free
#華中科技大學
#Raspbian http://mirrors.hustunique.com/raspbian/raspbian/
deb http://mirrors.hustunique.com/raspbian/raspbian/ jessie main contrib non-free
deb-src http://mirrors.hustunique.com/raspbian/raspbian/ jessie main contrib non-free

sudo apt-get update

sudo apt-get upgrade

2.安裝需要的庫,安裝可能不順利  自行按提示解決

sudo apt-get install 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


  • 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
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama
3.備份樹莓派系統

https://github.com/conanwhf/RaspberryPi-script

根據此部落格,將系統備份到Upan,sudo backup,時間比較漫長.

4.將備份好的系統拷貝到電腦,掛載

sudo mount -o loop,offset=62914560 \
  raspberry-working-image.img /mnt/raspberry-rootfs

offset後面的大小由sudo fdisk -l backup.img 得到 第二個數字×512.

/dev/loop0p1            8192      122879       57344    c  W95 FAT32 
/dev/loop0p2         122880     3788799     1832960   83  Linux5.

5.修改/mnt/raspberry-rootfs下的庫連結

最好先執行一下這個  

$ git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
$ cd cross-compile-tools
sudo ./fixQualifiedLibraryPaths /mnt/raspberry-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
cd /mnt/raspberry-rootfs/
以下操作在pc機 rootfs 目錄  路徑要對應好 不要修改了PC機的檔案
sudo mv ./usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 ./usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0_backup
sudo mv ./usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 ./usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0_backup
sudo ln -s ./opt/vc/lib/libEGL.so ./usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
sudo ln -s ./opt/vc/lib/libGLESv2.so ./usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
sudo ln -s ./opt/vc/lib/libEGL.so ./opt/vc/lib/libEGL.so.1
sudo ln -s ./opt/vc/lib/libGLESv2.so ./opt/vc/lib/libGLESv2.so.2
cd /usr/lib/arm-linux-gnueabihf; ls檢視庫資訊,重點注意紅色的庫 連結已經錯了,手動修改
sudo ln -sf ./opt/vc/lib/*.so ./usr/lib/arm-linux-gnueabihf/*.so*  具體名字根據當前存在的名字來寫,可能需要修改很多很多,嫌麻煩的可以寫指令碼來執行。
修改完畢後  繼續執行下面動作。
6. 進入已解壓好的qt目錄,我下載的qt5.9.2

./configure -opengl es2 -qt-xcb  -skip webengine -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=/home/mach/newDisk/e/toolchain/gcc-linaro-4.9.4-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/raspberry-rootfs -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix /usr/local/qt5pi -hostprefix /usr/local/qt5pi

編譯選項可以根據configure help自行修改,-device 指定了樹莓派的版本,這個也要對應,不要弄錯,-system-root 指定樹莓派系統掛載路徑,-prefix 指定了生成庫的安裝目錄/mnt/raspberry-rootfs/usr/local/qt5pi,-hostprefix指定了構建工具的安裝目錄,在主機的/usr/local/qt5pi

make 

sudo make install  

其中,跳過了webengine,因為make時報了一個python的錯誤 ,暫時還未解決,如有解決的,請聯絡我,謝謝!

/usr/bin/python2 ../../3rdparty/chromium/third_party/WebKit/Source/build/scripts/make_css_property_names.py ../../3rdparty/chromium/third_party/WebKit/Source/core/css/CSSProperties.in --output_dir gen/blink/core --gperf gperf
Traceback (most recent call last):
  File "../../3rdparty/chromium/third_party/WebKit/Source/build/scripts/make_css_property_names.py", line 197, in <module>
    in_generator.Maker(CSSPropertyNamesWriter).main(sys.argv)
  File "/home/mach/newDisk/e/raspberry/qt-everywhere-opensource-src-5.9.2/qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/build/scripts/in_generator.py", line 108, in main
    writer.write_files(options.output_dir)
  File "/home/mach/newDisk/e/raspberry/qt-everywhere-opensource-src-5.9.2/qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/build/scripts/in_generator.py", line 60, in write_files
    self._write_file_if_changed(output_dir, generator(), file_name)
  File "../../3rdparty/chromium/third_party/WebKit/Source/build/scripts/make_css_property_names.py", line 192, in generate_implementation
    raise subprocess.CalledProcessError(127, gperf_args, output='Command not found.')
subprocess.CalledProcessError: Command '['gperf', '--key-positions=*', '-P', '-n', '-m', '50', '-D', '-Q', 'CSSPropStringPool']' returned non-zero exit status 127

7.如果編譯過程中出現錯誤,大多是因為前面configure配置或者庫的錯誤。一定要仔細認真。