qt交叉編譯Android
Ⅰ QT 5.2.1 編譯ANDROID 問題
情況,之前電腦安裝Qt5.1.0 msvc2012正常運行,都可以用,後來安裝了Qt5.2.0 for Android 發現Qt5.1.0 msvc2012就不能編譯任何東西了,但是Qt5.2.0 for Android卻可以編譯桌面應用,另外vs2012卻可以正常運行。
網上找到方法都不能解決,說什麼添加環境變數啊之類的
錯誤圖片如下:
偶爾構建時到這樣就不動了:
最經常是出現如下:
Plain Text code
jom: xx\Makefile.Debug [debug\main.obj] Error 2
jom: xx\Makefile [debug] Error 2
09:34:23: 進程"D:\Qt\Qt5.2.1_vc2012\Tools\QtCreator\bin\jom.exe"退出,退出代碼 2 。
Error while building/deploying project untitled (kit: Desktop Qt 5.2.1 MSVC2012 32bit)
當執行步驟 'Make'時
09:34:23: Elapsed time: 00:01.
在把使用jom代替nmake的勾去掉後,編譯錯誤如下:
NMAKE : fatal error U1077: 「"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.EXE"」: 返回代碼「0xc0000135」
Stop.
NMAKE : fatal error U1077: 「"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\nmake.exe"」: 返回代碼「0x2」
Stop.
09:38:27: 進程"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\nmake.exe"退出,退出代碼 2 。
Error while building/deploying project untitled (kit: Desktop Qt 5.2.1 MSVC2012 32bit)
當執行步驟 'Make'時
09:38:27: Elapsed time: 00:01.eclispse如何運行C?哥哥救救make: *** 沒有指明目標並且找不到 makefile。 停止。????ubuntu下編譯ACE-6.2.0windows下makefile編寫問題關於linux makefile的問題關於linux編程的菜鳥問題大俠幫忙改個makefile文件能支持交叉編譯第一步就遇到問題,makefile不知道怎麼回事了
Ⅱ 在windows環境中怎麼編譯qt for android
1.下載安裝Qt 5.1.0 for Android (Windows 32-bit, 716 MB) 2.打開Qt Creator,打開幫助,輸入android,找到官方說明,按照教程一步步的操作。 3.首先需要下載以下四個軟體: 1)The Android SDK Tools 下載安裝 2)The Android NDK 下載並解壓,注意不能有空格 3)Apache Ant v1.8 or later 下載並解壓,同上 4)OpenJDK v6 or later 下載並解壓 4.打開Qt Creator,選擇工具-選項-android,配置好剛剛安裝的文件路徑,並首答差點擊舉橘【啟動android AVD管理器】 5.點擊 New 新建一個android模擬器,根據自己需要選擇Device 6.點擊ok-ok,並選擇剛剛建立的設備,點擊Start啟動,此過程比較慢,耐心等待。 7.重啟Qt Creator 已經可以看到有設備了,我們檢查 構建和運行 中 構建套件和Qt版本是否正確,確認無誤接下來就可以建立工程 8.新建一個Qt gui項者皮目,選擇android for arm 9.修改代碼,顯示hello Qt #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> class MainWindow : public QMainWindow { Q_OBJECT private: QLabel *label; public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif // MAINWINDOW_H #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { label=new QLabel("hello Qt",this); label->setGeometry(10,10,100,30); } MainWindow::~MainWindow() { } 10.直接點擊 構建 查看能不能正常編譯,如果此間報錯,可以留言,盡力為大家解決。一切正常的話直接點擊運行,此過程較慢,會編譯成apk文件並且部署到模擬器上。
Ⅲ 如何進行Qt應用程序的交叉編譯
1.設置環境變數: PATH=添加為交叉環境下編譯後生成的qmake路徑,通常和主機的系統是一種架構,同時需要確保交叉gcc編譯器在在PATH定義 QMAKESOEC=交叉編譯的對象的的平台描述文件,例如makespec/qws/linux-arm-g++ QTDIR=Qt的安裝文件,存放這庫和頭文件 LD_LIBRARY_PATH=存放的是Qt的交叉編譯後的庫,准備為目標編譯鏈接的庫 2。執行環境變數 通常我們都會將以上的設置放置在一個bash腳本中,需要的時候就執行一下。開始編譯 1.使用qmake -project來生成項目文件****.pro 2使用qmake來生成Makefile文件 3使用make來編譯移植:使用readeif工具來分析目標系統的以來庫,然後相關的庫到目標文件系統內。通常我們也是採取腳本的方式來完成。 一般而言,凡是有規律的或者重復性的工作,我們都可以採取腳本的方式來解決。
Ⅳ Qt交叉編譯遇到的問題
QT相關的安裝軟體包:
(1) tmake-1.13.tar.gz (編譯工具,如progen與tmake)
(2) qt-embedded-2.3.7.tar.gz (提供了qte的庫)
(3) qt-x11-2.3.2.tar.gz (為了生成相應的QT工具,如designer和qvfb等)
(4) qtopia-free-1.7.0.tar.gz (QTE的桌面環境程序)
(5) cross-3.3.2.tar.bz2 (交叉編譯工具)
一、安裝工具
1 安裝 tmake
在 Linux 命令模式下運行以下命令:
tar xfz tmake-1.11.tar.gz
export TMAKEDIR=$PWD/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin:$PATH
2 安裝 Qt/Embedded 2.3.7
在 Linux 命令模式下運行以下命令:
tar xfz qt-embedded-2.3.7.tar.gz
cd qt-2.3.7
export QTDIR=$PWD
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure –qconfig local–qvfb -depths 4,8,16,32
make sub-src
cd ..
上述命令 ./configure -qconfig -qvfb -depths 4,8,16,32 指定 Qt 嵌入式開發包生成虛擬緩沖幀工具qvfb,並支持 4,8,16,32 位的顯示顏色深度。另外我們也可以在 configure 的參數中添加-system-jpeg 和 gif,使 Qt/Embedded 平台能支持 jpeg、gif 格式的圖形。
上述命令 make sub-src 指定按精簡方式編譯開發包,也就是說有些 Qt 類未被編譯。Qt 嵌入式開發包有 5種編譯范圍的選項,使用這些選項,可控制 Qt 生成的庫文件的大小,但是您的應用所使用到的一些 Qt 類將可能因此在 Qt 的庫中找不到鏈接。編譯選項的具體用法可運行./configure -help 命令查看。
在這一過程的configure中出現了問題:有一個變數沒有聲明,發現是少了一個頭文件,加上即可,make順利通過,看到了enjoy!
3 安裝 Qt/X11 2.3.2
在 Linux 命令模式下運行以下命令:
tar xfz qt-x11-2.3.2.tar.gz
cd qt-2.3.2
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-opengl
make
make -C tools/qvfb
mv tools/qvfb/qvfb bin
cp bin/uic $QTEDIR/bin
cd ..
根據開發者本身的開發環境,也可以在 configure 的參數中添加別的參數, 比如-no-opengl 或-no-xfs,可以鍵入./configure -help 來獲得一些幫助信息。
在這個安裝過程中也出現了很多錯誤,典型的就是在make過程中:
/usr/local/qt-2.3.2/include/qvaluestack.h:57: error: cannot convert 'QValueListIterator<QMap<QString, QString> >' to 'const char*' for argument '1' to 'int remove(const char*)'
/usr/local/qt-2.3.2/include/qvaluestack.h: In member function 'T QValueStack<T>::pop() [with T = QString]':
xml/qxml.cpp:2502: instantiated from here
/usr/local/qt-2.3.2/include/qvaluestack.h:57: error: cannot convert 'QValueListIterator<QString>' to 'const char*' for argument '1' to 'int remove(const char*)'
make[2]: *** [xml/qxml.o] Error 1
make[2]: Leaving directory `/usr/local/qt-2.3.2/src'
make[1]: *** [sub-src] Error 2
make[1]: Leaving directory `/usr/local/qt-2.3.2'
make: *** [init] Error 2
這個錯誤是說,在文件qvaluestack.h的57行出錯。改正方法是修改文件qt-2.3.2/ include/qvaluestack.h的 第57行,將remove( this->fromLast() );改為 this->remove( this->fromLast() );
修改時可能要更改文件許可權,變成可寫的,chmod 666 qvaluestack.h。然後make順利通過,看到了enjoy。
二、交叉編譯 Qt/Embedded 的庫
開發居於 Qt/Embedded 的應用程序要使用到 Qt/Embedded 的庫,編寫的 Qt 嵌入式應用程序最終是在YLE270開發板上運行的,因此在把 Qt 嵌入式應用程序編譯成支持 YLE270 的目標代碼之前,需要兩樣東西,一個是 arm9 的 linux 編譯器,另一個是經 arm9 的linux 編譯器編譯過的 Qt/Embedded 的庫。安裝交叉編譯工具 cross-3.3.2 前面已經安裝過了。
這一步主要是配置 Qt/Embedded2.3.7 的安裝,Qt/Embedded 的安裝選項有很多個,您可以在命令行下直接輸入「./configure」來運行配置,這時安裝程序會一步一步提示你輸入安裝選項。您也可以在「./configure」後輸入多個安裝選項直接完成安裝的配置。在這些選項中有一個選項決定了編譯 Qt/Embedded 庫的范圍,即可以指定以最小,小,中,大,完全 5 種方式編譯 Qt/Embedded 庫。另外 Qt/Embedded 的安裝選項還允許我們自己定製一個配置文件,來有選擇的編譯 Qt/Embedded 庫,這個安裝選項是「-qconfig local」 ;當我們指定這個選項時,Qt/Embedded庫在安裝過程中會尋找qt-2.3.7/src/tools/qconfig-local.h 這個文件,如找到這個文件,就會以該文件裡面定義的宏,來編譯鏈接 Qt/Embedded 庫。
具體過程如下:
cd qt-2.3.7
export QTDIR=$PWD
export QTEDIR=$QTDIR
make clean
./configure –xplatform linux-arm-g++ -shared –debug (接下行)
-qconfig local -qvfb -depths 4,8,16,32
make
cd ..
在make中出現了錯誤,有變數沒有聲明,原來是優龍公司為了避免初學者在一開始就直接接觸到 Qt/Embedde 的復雜的宏編譯選項,把這些宏定義到一個名為 qconfig-local.h的安裝配置文件中,在安裝 Qt/Embedded 的時候,需要把這個文件復制到 Qt/Embedded 的安裝路徑的/src/tools 子路徑下,
cp /配置文件所在路徑/qconfig-local.h ./src/tools
make順利通過,看到了enjoy。
最後就可以在命令行下輸入make 命令對整個工程進行編譯鏈接了,在這里,要把過程中產生的文件放在同一個文件夾裡面,方便應用。
在最後make完畢以後我還是遇到了一個問題,就是生成的可執行文件不能運行,運行時提示:./hello cannot execute binary file,當然不能直接在自己的主機上運行了,因為生成的二進制文件要下到板子上運行的。接上液晶屏,板子上電,把生成的可執行文件下載到板子上,要chmod一下,不然許可權不夠,終於在液晶屏上看到了自己弄的小程序,好開心!
三、添加一個 Qt/Embedded 應用到 QPE
以hello,world!為例
1 在工作的機器上解包 qtopia
tar zxvf qtopia-free-1.7.x.tar.gz
cd qtopia-free-1.7.x
export QTDIR=$QTEDIR
export QPEDIR=$PWD
export PATH=$QPEDIR/bin:$PATH
注意在上面已經設定環境變數 QPEDIR 為 QPE 的安裝(解包)路徑。
2 建立 Hello,World 的例子程序的圖標文件
方法是:製作一個 32 X 32 大小的 PNG 格式的圖標文件,將該文件存放在$QPEDIR/pics/inline 目錄下,然後使用以下命令將$QPEDIR/pics/inline 目錄下的所有圖形文件轉換成為一個 c 語言的頭文件,這個頭文件包含了該目錄下的圖形文件的 rgb 信息。
qembed --images $QPEDIR/pics/inline/*.*
> $QPEDIR/src/libraries/qtopia/inlinepics_p.h
3 交叉編譯 qtopia
在$QPEDIR 路徑下,運行以下命令
cd src
./configure –platform linux-arm-g++
make
cd ..
在這一過程中也出現了比較大的錯誤,在make的時候又出現了error,是resource.cpp的174行的變數qembed_findImage沒有聲明,考慮到以前遇到的情況,推斷可能是少了某個頭文件,但是又不知道是哪一個,google了很久都沒有找到解決辦法,沒辦法只好點開src/libraries/qtopia下面的每一個頭文件看了一遍,還是沒有發現有含有這個變數的文件,繼續google,然後發現了inlinepics_p.h中包含qembed_findImage,於是vi /usr/local/qtopia-free-1.7.0/src/libraries/qtopia/inlinepics_p.h,發現inlinepics_p.h是空白的,原來是
qembed --images $QPEDIR/pics/inline/*.*
> $QPEDIR/src/libraries/qtopia/inlinepics_p.h
出了錯誤,重新操作一遍這一步,再查看inlinepics_p.h,發現正常了,要繼續交叉編譯qtopia:
make clean
./configure –platform linux-arm-g++
Ⅳ QtCreator配置交叉編譯工具鏈
環境:ubuntu16.04桌面環境。
說明:使用ubuntu16.04桌面環境,安裝QtCreator之後,再利用QtCreator開發QT5 GUI程序,如果編譯的程序要運行在arm linux嵌入式系統中,則必須配置交叉編譯工具鏈。
主要配置內容:調試器、編譯器、QT版本。
1、打開工具,點擊選項。
2、選擇選項中的構建與運行,概要界面。
3、構建套件(kit)界面。
4、Qt Versions界面。
5、編譯器界面。
6、Debuggers界面。
7、Qbs界面。
8、交叉編譯例子:
Ⅵ C/C++源文件直接交叉編譯生成.so文件供安卓應用程序調用,可以嗎
Jni調用就行了,是要按規則寫介面api,如果介面很多,也沒法,那是你的業務問題,要重新設計業務邏輯。我們之前用的c++單獨交叉編譯一個進程,和安卓界面用tcp通信,如果介面多也以為著協議多,一樣的。
Ⅶ qt交叉編譯後不顯示窗口
qt交叉編譯後不顯示窗口是因為誤將類成員函數名稱命名為show。程序在執行到w.show()之後,編譯器將成員函數看作show函數的重載,因此不再調用默認的show函數導致窗體無法顯示。
Ⅷ 如何用Qt寫Android應用
我也有動力寫這篇文章了。 下面我簡單介紹一下用Qt Creator寫Android應用的步驟。 PS: 在這之前你應該搭建好一個Qt-Android環境,參考我另一篇文章: 設置qt-android開發環境 第一步:創建一個Android項目 我以Empty Qt Project為例。點擊Choose後出現一個對話框要求填寫Project的名字和選擇路徑,輸入完成後點擊Next,到下面一個比較重要的操作:選擇Qt Version 注意,默認是選擇Destkop的,正確應該按上圖設置。設置後按Next確認一下,沒有錯就按Finish完成Qt-Android項目的建立。只要正確建立了Qt項目,就完成了一大半了。下圖是完成後的一個截圖: 第二步:編寫程序 在這步大家按照平常Qt Creator的步驟寫程序就好。但是注意的是,有些模塊暫時還沒有移植,例如Qt網路模塊,所以不能有網路相關的應用(不過我想這遲早會移植的)。 作為例子,我就用hello world吧:#include<QApplication#include<QLabelintmain(intargc, char**argv){QApplicationapp(argc, argv);QLabel*label=newQLabel("<palign=centerHello, World!</p");label-show();returnapp. exec();}第三步:設置編譯選項 Projects標簽 - Run 展開Package configurations,選擇Android target SDK,(android7為例) 展開緊跟下面的Deploy configurations,選擇Deploy local qt libs 然後按左邊倒數第三個綠色三角按鈕運行: 第四步:手機上運行 你寫的應用會打包成apk放在你項目文件夾里的/android/bin裡面。把它拷到手機上安裝。但是這樣手機還不能運行這個程序,畢竟Android系統沒有Qt的庫。這個時候你就需要Ministro,一個為Android系統Qt程序運行下載所需要的庫。可以到電子市場搜索Ministro,或者到Ministro項目里下載:Ministro 。安裝好Ministro後再運行Qt程序,根據提示下載需要的庫。
Ⅸ 如何進行Qt應用程序的交叉編譯
首先得把我們在X86機上調好的程序進行交叉編譯,如果在X86上都沒有通過的話。。那就不用交叉編譯了,(肯定是通不過的),還是到正題吧,設置好環境變數,我們用以用echo 來查看環境變數,echo $TMAKEPATH ,如果返回的不是.../qws/linux-arm-g++ 的字元的話,我們一定得從新設置,
export TMAKEPATH=/tmake 的安裝路徑/qws/linux-arm-g++ ,同時QTDIR一定得要指定QTE的安裝路徑,設置過程如下:
export QTDIR=...../qt-2.3.7
以上環境設置好後,我們可以使用tmake來生成Makefile,注意這里我們是用tmake,而不是用qmake(注意),tmake工具在tmake包裡面。 具體做法,我們可以在命令行下打:
tmake -o Makefile 工程名.pro
這樣我們就新生成了一個Makefile文件,下一步,我們要打開這個文件,做一些小的修改
1: 將LINK=arm-linux-gcc 改為:LINK=arm-linux-g++
2:將LIBS=$(SUBLIBS) -L$(QTDIR)/lib -lm -lqte這句話改為:
LIBS=$(SUBLIBS) -L/opt/gcc-2.3.2-glibc-3.3.2/lib -L$(QTDIR)/lib -lm -lqte
加上你的交叉編譯的庫。
最後我們可以make了,一個可以在您的板子上可以運行的二進制文件產生了。linux