QtプログラムをARMに移植

3435 ワード

会社は前にarm+linuxの体系に基づいてプロジェクトをして、板の上でc++のサーバーのプログラムを実行したいと思って、考えてみるとQtはc++に対してとても良い互換性があると感じます.また、プラットフォーム間で非常に優れているため、将来他のシステムに移植するのは非常に便利であり、Qtが提供する編集ツールQtCreatorの操作も便利であるため、開発プラットフォームとしてQtを選択することにした.
ARMでQtを実行するには、まずQtのARMバージョンをコンパイルする必要があります.ここで私はQtバージョンを採用しています.qt-everywhere-opensource-src-4.8.5です.私が採用しているコンパイル環境はx 86のホスト+ubuntuのシステムです.開発ボードはcotexA 8を使用しているので、私が使用しているクロスコンパイル環境はarm 11クロスコンパイルツールチェーンです.
クロスコンパイルツールチェーンのダウンロードアドレスは次のとおりです.http://115.com/?ct=rar&pickcode=b33lpqa0qhm8i84xh
qt-everywhere-opensource-src-4.8.5のダウンロードアドレスは:http://115.com/?ct=rar&pickcode=cmm4rf9l5g2m6dbrl
     1.まず、クロスコンパイルツールチェーンをインストールします.このツールチェーンは圧縮パッケージです.まず、彼を解凍し、ディレクトリarm-2013.05/arm-none-linux-gnueabi/binの下に置いてあるのはクロスコンパイルツールチェーンです.
ar  as c++  g++  gcc ld  nm  objcopy objdump  ranlib  README.txt strip
ここでgccはcコンパイラであり、g++はc++のコンパイラである.
    2.Qtの圧縮パッケージを解凍します.これはQtソースコードのあるフォルダです.ここでmkspecs/qws/linux-arm-g+/qmakeを見つけました.confこのファイル、このファイルにはQtをコンパイルするために使用されるツールチェーンのパスが記録されています.このパスを変更し、さっきインストールしたクロスコンパイルツールチェーンに変更する必要があります.変更する必要があるのは以下の行です.
#modifications to g++.conf
QMAKE_CC=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-gcc
QMAKE_CXX=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-g++
 
#modifications to linux.conf
QMAKE_AR=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-ar  cqs
QMAKE_OBJCOPY=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-strip
「=」の後ろには、クロスコンパイルツールチェーンがインストールされているパスがあり、それに応じて変更されます.
    3.mkspecs/common/g++を見つけました.confというファイルで、このファイルにはターゲットマシンのcpuシステムが記録されています.適切なオプションを変更するには、次の手順に従います.
QMAKE_CFLAGS_RELEASE+= -O2 -march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp
ここでの「-march=armv 7-a」は、ターゲットマシンのcpu系がarmv 7系のcpuであることを示し、「-mtune=cortex-a 8」は、ターゲットマシンのcpuがcotex-A 8であることを示している.
    4.Qtを構成するオプションも用意されています.
Linux端末で実行:
./configure -static -prefix
/usr/local/qt-everywhere-opensource-src-4.8.5     -embedded  arm -qt-sql-sqlite   -qt-gfx-qvfb  -qt-kbd-qvfb  -qt-mouse-qvfb -host-little-endian -no-cups-no-3dnow -nomake examples -nomake demos -nomake docs -xplatform/qws/linux-arm-g++
Qtの各オプションの意味については詳しく述べませんが、いくつかの重要なオプションについてお話しします.「-qt-sql-sqlite」はsqliteデータベースのドライバをコンパイルするということです.「-host-little-endi」は、ターゲットマシンが小端フォーマットのCPU「-static」がQtの静的ライブラリバージョンをコンパイルすることを示しています.このオプションは、Qtプログラムをコンパイルする際にQtの静的ライブラリを使用して、動的リンクライブラリへのプログラムの依存性を解消するため重要です.-prefix/usr/local/qt-everywhere-opensource-src-4.8.5は、Qtを示すインストールディレクトリです. 
 
     5.コンパイルを開始し、qt-everywhere-opensource-src-4.8.5でmake操作を実行すると、Qtのコンパイルに時間がかかる場合があります.
     6.Qtをインストールします.コンパイルが完了してからmake installを実行すると、Qtは指定したディレクトリにインストールされます.
これで使えると思いますか、まだだめです.Qtの環境変数をエクスポートしなければなりません.具体的な操作はLinux端末の下で以下の文を実行します.
export  ARMQTDIR=/usr/local/qt-everywhere-opensource-src-4.8.5
export  PATH=$ARMQTDIR/bin:$PATH
export  MANPATH=$ARMQTDIR/man:$MANPATH
export  LD_LIBRARY_PATH=$ARMQTDIR/lib:$LD_LIBRARY_PATH
export  QMAKESPEC=/usr/local/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++
ここで/usr/local/qt-everywhere-opensource-src-4.8.5は、Qtインストールのパスを指定します.実行が完了したら、qmake-vを使用してQtのバージョンを確認して、インストールが正しいかどうかを確認することができます.