導航:首頁 > 源碼編譯 > 交叉編譯qtembedded庫

交叉編譯qtembedded庫

發布時間:2022-08-26 04:01:39

『壹』 linux嵌入式系統開發的目錄

第1章 嵌入式系統概述 1
1.1 嵌入式系統的概念 1
1.1.1 嵌入式系統的定義 1
1.1.2 嵌入式系統的特點 2
1.2 嵌入式系統的組成 2
1.2.1 嵌入式處理器 2
1.2.2 外圍設備 3
1.2.3 嵌入式操作系統 3
1.2.4 應用軟體 3
1.3 嵌入式處理器 4
1.3.1 嵌入式處理器的分類 4
1.3.2 嵌入式微處理器 5
1.3.3 嵌入式微控制器 5
1.3.4 嵌入式DSP處理器 6
1.3.5 嵌入式片上系統 6
1.3.6 選擇嵌入式處理器 7
1.4 嵌入式操作系統 7
1.4.1 操作系統的概念和分類 7
1.4.2 實時操作系統 8
1.4.3 常用的嵌入式操作系統 10
1.5 新型的嵌入式操作系統 13
1.5.1 Android 13
1.5.2 MontaVista 14
1.6 嵌入式系統的應用 15
1.7 嵌入式系統的發展趨勢 18
1.7.1 嵌入式系統面臨的挑戰 18
1.7.2 嵌入式系統的發展前景 18
1.8 本章小結 19
第2章 嵌入式系統開發過程 20
2.1 嵌入式軟體開發介紹 20
2.1.1 嵌入式軟體開發的特殊性 20
2.1.2 嵌入式軟體的分類 21
2.1.3 嵌入式軟體的開發流程 21
2.1.4 嵌入式軟體開發工具的發展趨勢 23
2.2 嵌入式軟體的調試技術 24
2.2.1 調試技術介紹 24
2.2.2 基於JTAG的ARM系統調試 25
2.3 嵌入式軟體測試技術 26
2.3.1 宿主機-目標機開發模式 26
2.3.2 目標監控器 27
2.4 嵌入式系統集成開發環境 29
2.4.1 ADS的介紹 29
2.4.2 ADS建立工程的使用介紹 31
2.4.3 AXD調試器的使用介紹 36
實例2-1:ARM開發環境ADS的使用實例 38
2.5 本章小結 42
第3章 ARM體系結構 43
3.1 ARM體系結構概述 43
3.1.1 ARM體系結構簡介 44
3.1.2 ARM體系結構的技術特徵 46
3.1.3 CISC的體系結構 47
3.1.4 RISC的體系結構 47
3.1.5 RISC系統和CISC系統的比較 49
3.2 ARM微處理器的分類 50
3.2.1 ARM7微處理器 50
3.2.2 ARM9微處理器 51
3.2.3 ARM9E微處理器 51
3.2.4 ARM10E微處理器 52
3.2.5 ARM11微處理器 53
3.2.6 SecurCore微處理器 53
3.2.7 trongARM微處理器 53
3.2.8 XScale微處理器 54
3.3 ARM微處理器的應用 54
3.3.1 ARM微處理器的應用選型 54
3.3.2 S3C2410處理器 55
3.4 存儲器 56
3.4. 1 存儲器簡介 56
3.4.2 SDRAM操作 58
3.4.3 Flash 59
3.5 ARM編程模型 60
3.5.1 數據類型 60
3.5.2 存儲器格式 61
3.5.3 處理器工作狀態 61
3.5.4 處理器運行模式 62
3.5.5 寄存器組織 62
3.5.6 內部寄存器 65
3.6 ARM指令的定址方式 66
3.6.1 立即定址 66
3.6.2 寄存器定址 67
3.6.3 寄存器間接定址 67
3.6.4 相對定址 68
3.6.5 堆棧定址 68
3.6.6 塊復制定址 69
3.6.7 變址定址 69
3.6.8 多寄存器定址 70
3.7 ARM指令集 70
3.7.1 ARM指令的格式 70
3.7.2 ARM指令分類 71
3.7.3 Thumb指令介紹 77
3.7.4 Thumb指令分類 78
3.7.5 ARM指令集和Thumb指令集的區別 81
3.8 ARM微處理器的異常 82
3.8.1 ARM體系結構所支持的異常類型 83
3.8.2 異常向量表 84
3.8.3 異常優先順序 84
3.8.4 應用程序中的異常處理 85
3.8.5 各類異常的具體描述 86
3.9 本章小結 90
第4章 Linux基本操作 91
4.1 Linux系統的介紹 91
4.1.1 Linux的概況 91
4.1.2 Linux操作系統的構成 93
4.1.3 Linux常見的發行版本 94
4.1.4 Linux內核的特點 95
4.2 Linux命令的使用 96
4.3 vi編輯器的使用 106
4.3.1 vi編輯器的進入 107
4.3.2 命令模式的命令 107
4.3.3 末行模式的命令 108
實例4-1:vi編輯器使用實例 109
4.4 Shell編程 110
4.4.1 Shell基礎介紹 110
4.4.2 Shell程序的變數和參數 113
4.4.3 運行Shell程序 114
4.4.4 Shell程序設計的流程式控制制 115
4.4.5 Shell輸入與輸出 120
4.4.6 bash介紹 121
4.5 綜合實例 123
實例4-2:編寫清除/var/log下的log文件綜合實例 123
實例4-3:編寫尋找死鏈接文件綜合實例 126
4.6 本章小結 129
第5章 Linux進程 130
5.1 進程概述 130
5.1.1 進程結構 131
5.1.2 進程的控制操作 132
5.1.3 進程的屬性 134
5.1.4 進程的創建和調度 135
5.1.5 Linux進程命令 137
5.2 系統調用 141
5.2.1 系統調用簡述 141
5.2.2 系統調用的進入 142
5.2.3 與進程管理相關的系統調用 142
5.3 管道 143
5.3.1 管道系統調用 143
5.3.2 管道的分類 144
實例5-1:管道通信實例 145
5.4 信號 147
5.4.1 常見的信號種類 147
5.4.2 系統調用函數 148
5.4.3 信號的處理 149
5.4.4 信號與系統調用的關系 150
實例5-2:信號實例 151
5.5 信號量 152
5.5.1 信號量概述 152
5.5.2 相關的數據結構 153
5.5.3 相關的函數 155
實例5-3:信號量實例 156
5.6 共享內存 161
5.6.1 共享內存原理 161
5.6.2 共享內存對象的結構 162
5.6.3 相關的函數 162
實例5-4:共享內存實例 163
5.7 消息隊列 169
5.7.1 有關的數據結構 169
5.7.2 相關的函數 171
實例5-5:消息隊列實例 173
5.8 綜合實例 177
實例5-6:多線程編程實例 177
5.9 本章小結 178
第6章 建立Linux開發環境 179
6.1 建立Linux開發環境 179
6.1.1 Cygwin開發環境 179
6.1.2 VMware Workstation開發環境 181
6.2 交叉編譯的使用 183
6.2.1 GNU交叉工具鏈的設置 183
6.2.2 ARM GNU常用匯編語言 186
6.2.3 GNU交叉工具鏈的常用工具 188
6.2.4 交叉編譯環境 191
6.3 Linux下的C編程 194
6.3.1 Linux程序設計特點 194
6.3.2 Linux下C語言編碼的風格 195
6.3.3 Linux程序基礎 195
6.3.4 Linux下C編程的庫依賴 197
6.4 gcc的使用與開發 197
6.4.1 gcc簡介和使用 197
6.4.2 gcc選項 198
6.4.3 gcc的錯誤類型 201
實例6-1:gcc編譯器環境的應用實例 202
6.5 gdb調試器的介紹和使用 203
6.5.1 gdb調試器的使用 203
6.5.2 在gdb中運行程序 204
6.5.3 暫停和恢復程序運行 206
6.5.4 遠程調試 209
實例6-2:gdb調試器環境的應用實例 209
6.6 GNU make和Makefile的使用 211
6.6.1 Makefile的基本結構 212
6.6.2 Makefile的變數 213
6.6.3 Makefile的隱含規則 215
6.6.4 Makefile的命令使用 218
6.6.5 Makefile的函數使用 219
6.6.6 Makefile文件的運行 221
6.6.7 Makefile規則書寫命令 223
實例6-3:Makefile的命令使用實例 229
6.7 autoconf和automake的使用 231
6.7.1 autoconf的使用 231
6.7.2 Makefile的編寫 234
6.7.3 automake的使用 234
6.7.4 使用automake和autoconf產生Makefile 235
6.7.5 自動生成Makefile的方法 235
6.8 綜合實例 236
實例6-4:gcc編譯器的綜合實例 236
實例6-5:gdb調試器的綜合實例 239
實例6-6:Makefile的綜合實例 242
6.9 本章小結 244
第7章 Linux操作系統移植 245
7.1 移植的概念 245
7.1.1 Linux可移植性發展 246
7.1.2 Linux的移植性 246
7.2 Linux內核結構 247
7.2.1 Linux內核組成 247
7.2.2 子系統相互間的關系 251
7.2.3 系統數據結構 252
7.2.4 Linux內核源代碼 252
7.3 Linux內核配置 256
實例7-1:Linux內核配置實例 256
7.4 Linux操作系統移植介紹 259
7.4.1 Linux系統移植的兩大部分 259
7.4.2 內核文件的修改 261
7.4.3 系統移植所必需的環境 265
7.5 綜合實例 268
實例7-2:編譯Linux內核應用實例 268
實例7-3:Linux內核的燒寫實例 270
實例7-4:使用Kgdb構建Linux內核調試環境 271
7.6 本章小結 280
第8章 Bootloader的使用 281
8.1 Bootloader 概述 281
8.1.1 Bootloader的作用 282
8.1.2 Bootloader的功能 283
8.1.3 Bootloader的種類 283
8.1.4 Bootloader的工作模式 285
8.1.5 Bootloader的啟動方式 285
8.1.6 Bootloader的啟動流程 287
8.1.7 Bootloader與主機的通信 287
8.2 vivi 287
8.2.1 vivi的常用命令和文件結構 288
8.2.2 vivi第一階段的分析 288
8.2.3 vivi第二階段的分析 295
8.2.4 vivi的配置與編譯 297
8.3 U-boot 298
8.3.1 U-boot常用命令和源代碼目錄結構 298
8.3.2 U-boot支持的主要功能 301
8.3.3 U-boot的編譯和添加命令 302
8.3.4 U-boot的啟動介紹 305
8.3.5 U-boot的移植和使用 307
8.3.6 U-boot的啟動過程 308
8.3.7 U-boot的調試 310
8.4 其他常見的Bootloader 312
8.5 綜合實例 313
實例8-1:vivi編譯實例 314
實例8-2:U-boot在S3C2410上的移植實例 315
實例8-3:Bootloader設計實例 317
8.6 本章小結 319
第9章 構建Linux根文件系統 320
9.1 Linux文件系統概述 320
9.1.1 Linux文件系統的特點 320
9.1.2 其他常見的嵌入式文件系統 322
9.1.3 Linux根文件目錄結構 324
9.1.4 Linux文件屬性介紹 324
9.2 使用BusyBox生成工具集 325
9.2.1 BusyBox概述 325
9.2.2 BusyBox進程和用戶程序啟動過程 326
9.2.3 編譯/安裝BusyBox 327
實例9-1:用BusyBox建立簡單的根文件系統 331
9.3 構建根文件系統 333
實例9-2:構建根文件系統 337
9.4 配置yaffs文件 339
9.4.1 yaffs文件系統設置 340
9.4.2 yaffs文件系統測試 341
9.5 綜合實例 343
實例9-3:製作/使用yaffs文件系統映像文件 343
實例9-4:製作/使用jffs2文件系統映像文件 345
9.6 本章小結 347
第10章 設備驅動程序開發 348
10.1 設備驅動程序概述 348
10.1.1 驅動程序的簡介 349
10.1.2 設備分類 349
10.1.3 設備號 350
10.1.4 設備節點 350
10.1.5 驅動層次結構 351
10.1.6 設備驅動程序的特點 352
10.2 設備驅動程序與文件系統 353
10.2.1 設備驅動程序與文件系統的關系 353
10.2.2 設備驅動程序與操作系統的關系 353
10.2.3 Linux設備驅動程序的介面 353
10.2.4 設備驅動程序開發的基本函數 359
10.2.5 Linux驅動程序的載入 359
10.3 設備驅動程序的使用 364
10.3.1 驅動程序模塊的載入 364
10.3.2 創建設備文件 364
10.3.3 使用設備 364
10.4 網路設備基礎知識 365
10.4.1 網路協議 365
10.4.2 網路設備介面基礎 366
10.5 網路設備驅動程序的架構 369
10.5.1 網路設備驅動程序體系結構 369
10.5.2 網路設備驅動程序模塊分析 369
10.5.3 網路設備驅動程序的實現模式 376
10.5.4 網路設備驅動程序的數據結構 376
10.6 綜合實例 381
實例10-1:鍵盤驅動開發實例 381
實例10-2:I2C匯流排驅動的編寫實例 384
實例10-3:TFT-LCD顯示驅動實例 388
10.7 本章小結 393
第11章 嵌入式GUI開發 394
11.1 嵌入式系統中的GUI簡介 395
11.1.1 嵌入式GUI系統的介紹 395
11.1.2 基於嵌入式Linux的GUI系統底層實現基礎 397
11.1.3 嵌入式GUI系統的分析與比較 397
11.2 嵌入式系統下MiniGUI的實現 399
11.2.1 圖形用戶界面MiniGUI簡介 399
11.2.2 MiniGUI的發布版本 401
11.2.3 MiniGUI在S3C2410處理器上的移植過程 404
11.3 Qt/Embedded嵌入式圖形開發基礎 407
11.3.1 Qt/Embedded開發環境的安裝 407
11.3.2 Qt/Embedded底層支持及實現代碼分析 411
11.3.3 Qt/Embedded信號和插槽機制 412
11.3.4 Qt/Embedded窗口部件 415
11.3.5 Qt/Embedded圖形界面編程 418
11.3.6 Qt/Embedded對話框設計 419
11.3.7 資料庫 420
實例11-1:Qt/Embedded圖形開發應用實例 423
11.4 Qtopia移植 424
11.4.1 Qtopia簡介 424
11.4.2 交叉編譯、安裝Qtopia 424
實例11-2:Qtopia移植應用實例 426
11.5 Qt/Embedded應用開發 427
11.5.1 嵌入式硬體開發平台的選擇 427
11.5.2 Qt/Embedded常用工具的介紹 429
11.5.3 交叉編譯Qt/Embedded的庫 430
11.5.4 Qt/E程序的編譯與執行 431
實例11-3:Qt/Embedded實戰演練 432
11.6 綜合實例 436
實例11-4:Hello,Qt/Embedded應用程序 436
實例11-5:基本繪圖應用程序的編寫 439
11.7 本章小結 443
第12章 綜合工程實例 444
12.1 文件系統的生成與燒寫 444
12.1.1 yaffs文件系統的製作與生成 445
12.1.2 jffs2文件系統的製作與生成 449
12.2 基於Linux的數碼相框 452
12.2.1 系統需求分析 452
12.2.2 系統總體設計 453
12.2.3 軟體設計實現 454
12.2.4 軟硬體集成 460
12.3 基於Linux的MPlayer解碼播放器 461
12.3.1 可行性分析報告 461
12.3.2 系統總體設計 462
12.3.3 軟體總體設計 463
12.3.4 軟體詳細設計 467
12.3.5 軟硬體集成 477
12.4 基於Linux的GPS導航系統的開發 478
12.4.1 嵌入式開發流程圖 479
12.4.2 GPS導航定位系統的系統定義 481
12.4.3 GPS導航系統的可行性分析報告 486
12.4.4 GPS導航系統需求分析 487
12.4.5 GPS導航系統總體設計實現 489
12.4.6 GPS導航系統硬體設計實現 491
12.4.7 GPS導航系統軟體概括設計 495
12.4.8 GPS導航系統軟體詳細設計 495
12.4.9 GPS導航系統資料庫的配置設計 522
12.4.10 GPS導航系統軟體實現 534
12.5 本章小結 538

『貳』 如何使用CMake進行交叉編譯

cmake交叉編譯配置

很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程序。裡面牽扯到相關頭文件的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關CMake在面對交叉編譯的時候,需要做的一些准備工作。

CMake給交叉編譯預留了一個很好的變數CMAKE_TOOLCHAIN_FILE,它定義了一個文件的路徑,這個文件即toolChain,裡面set了一系列你需要改變的變數和屬性,包括C_COMPILER,CXX_COMPILER,如果用Qt的話需要更改QT_QMAKE_EXECUTABLE以及如果用BOOST的話需要更改的BOOST_ROOT(具體查看相關Findxxx.cmake裡面指定的路徑)。CMake為了不讓用戶每次交叉編譯都要重新輸入這些命令,因此它帶來toolChain機制,簡而言之就是一個cmake腳本,內嵌了你需要改變以及需要set的所有交叉環境的設置。

toolChain腳本中設置的幾個重要變數

1.CMAKE_SYSTEM_NAME:

即你目標機target所在的操作系統名稱,比如ARM或者Linux你就需要寫"Linux",如果Windows平台你就寫"Windows",如果你的嵌入式平台沒有相關OS你即需要寫成"Generic",只有當CMAKE_SYSTEM_NAME這個變數被設置了,CMake才認為此時正在交叉編譯,它會額外設置一個變數CMAKE_CROSSCOMPILING為TRUE.

2. CMAKE_C_COMPILER:

顧名思義,即C語言編譯器,這里可以將變數設置成完整路徑或者文件名,設置成完整路徑有一個好處就是CMake會去這個路徑下去尋找編譯相關的其他工具比如linker,binutils等,如果你寫的文件名帶有arm-elf等等前綴,CMake會識別到並且去尋找相關的交叉編譯器。

3. CMAKE_CXX_COMPILER:

同上,此時代表的是C++編譯器。

4. CMAKE_FIND_ROOT_PATH:

指定了一個或者多個優先於其他搜索路徑的搜索路徑。比如你設置了/opt/arm/,所有的Find_xxx.cmake都會優先根據這個路徑下的/usr/lib,/lib等進行查找,然後才會去你自己的/usr/lib和/lib進行查找,如果你有一些庫是不被包含在/opt/arm裡面的,你也可以顯示指定多個值給CMAKE_FIND_ROOT_PATH,比如

set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

該變數能夠有效地重新定位在給定位置下進行搜索的根路徑。該變數默認為空。當使用交叉編譯時,該變數十分有用:用該變數指向目標環境的根目錄,然後CMake將會在那裡查找。

5. CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:

對FIND_PROGRAM()起作用,有三種取值,NEVER,ONLY,BOTH,第一個表示不在你CMAKE_FIND_ROOT_PATH下進行查找,第二個表示只在這個路徑下查找,第三個表示先查找這個路徑,再查找全局路徑,對於這個變數來說,一般都是調用宿主機的程序,所以一般都設置成NEVER

6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:

對FIND_LIBRARY()起作用,表示在鏈接的時候的庫的相關選項,因此這里需要設置成ONLY來保證我們的庫是在交叉環境中找的.

7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:

對FIND_PATH()和FIND_FILE()起作用,一般來說也是ONLY,如果你想改變,一般也是在相關的FIND命令中增加option來改變局部設置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH

8. BOOST_ROOT:

對於需要boost庫的用戶來說,相關的boost庫路徑配置也需要設置,因此這里的路徑即ARM下的boost路徑,裡面有include和lib。

9. QT_QMAKE_EXECUTABLE:

對於Qt用戶來說,需要更改相關的qmake命令切換成嵌入式版本,因此這里需要指定成相應的qmake路徑(指定到qmake本身)

toolChain demo

# this is required
SET(CMAKE_SYSTEM_NAME Linux)

# specify the cross compiler
SET(CMAKE_C_COMPILER /opt/arm/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_74xx-g++)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /opt/arm/ppc_74xx /home/rickk/arm_inst)

# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# configure Boost and Qt
SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
SET(BOOST_ROOT /opt/boost_arm)

這樣就完成了相關toolChain的編寫,之後,你可以靈活的選擇到底採用宿主機版本還是開發機版本,之間的區別僅僅是一條-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做轉移,但目標平台是同一個,你僅僅需要寫一份toolChain放在一個地方,就可以給所有工程使用。

『叄』 Qt在linux下怎樣設置交叉編譯環境

你下載的是QTE么?QT4.7安裝時好像用的gmake和gmake install;安裝完成之後在lib文件夾下會新生成六七個.so庫文件;如果你完全正確安裝了並且環境變數都設置正確了,應該可以編譯通過;

『肆』 如何在Linux下用QT creator搭建mips-linux交叉編譯開發環境,如果您熟悉ARM-linux環境搭建的話也希望你能指

首先你的linux系統要裝QT庫 然後你要編譯mips還要有Mips的編譯器 arm的是arm-linux-gcc mips我不熟悉 然後就可以把Qt creator下的工程拿到linux下來編譯了
安裝QT庫需比較繁瑣 你先看看網上的教程 有問題再找我吧

『伍』 兄弟我最近剛學QT,到了交叉編譯這一塊,make之後老是出現 下面的錯誤

交叉編譯的時候要加上配置要加上:-embedded arm
例如:
./configure \
-no-pch \
-no-dbus \
-no-nas-sound \
-no-opengl \
-no-sm \
-no-xshape \
-no-xinerama \
-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-fontconfig \
-no-xkb \
-no-glib \
-little-endian \
-no-mmx -no-3dnow -no-sse -no-sse2 \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-qconfig smal

希望可以幫助到你

『陸』 如何進行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

『柒』 怎樣交叉編譯一個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了,一個可以在您的板子上可以運行的二進制文件產生了。 至於怎樣加到qtopia上去呢。。。待續。。。。。。。。。。。。。。

『捌』 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++

『玖』 怎樣交叉編譯qt-x11-opensource-src-4.3.2

可以的,只需要把QtVersion設置好就可以了。
點擊Tools->Options->Qt4->Qt Versions.
然後添加你已經編譯的Qtembedded目錄進去,就可以編譯了。
很簡單的。
還有,在你的工程中的Release配置中,必須保證Qt Version是Qtembedded,也就是你剛才新建的那個Qt Version
Qt Creator默認是Default Qt version的。
這需要點擊左邊的Projects來修改。
如果你前面把Default Qt Version改為Qtembedded了,就不用再改了。

另外,交叉編譯的可執行文件是不能用QtCreator調試的,因為硬體平台不一樣。

閱讀全文

與交叉編譯qtembedded庫相關的資料

熱點內容
泡沫APP在哪裡下載 瀏覽:937
簡述高級語言進行編譯全過程 瀏覽:39
管家婆輝煌2加密狗挪到另一台電腦 瀏覽:760
摩托車在哪裡app看考題 瀏覽:356
蘋果5app在哪裡設置 瀏覽:737
如何查看伺服器的磁碟使用 瀏覽:165
python蒙特卡洛模型投點圖 瀏覽:330
安卓手機屬於什麼介面 瀏覽:742
微信群推廣網站源碼 瀏覽:764
九江離鷹潭源碼 瀏覽:719
python可以當作函數的返回值 瀏覽:422
地鐵逃生體驗服怎麼進入安卓 瀏覽:833
齊魯工惠app的中獎記錄在哪裡 瀏覽:759
linuxkill命令詳解 瀏覽:103
dhcp伺服器動態分配地址 瀏覽:265
門禁卡加密了能破解嗎 瀏覽:215
在哪裡下載百度網盤app 瀏覽:917
伺服器要升級什麼意思 瀏覽:831
銀行還房貸解壓方法 瀏覽:702
伺服器主機辦公如何提速 瀏覽:920