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

gosqllite交叉編譯

發布時間:2025-02-27 12:57:45

① 如何編譯SQLite-How To Compile SQLite

SQLite是ANSI-C的源代碼。在使用之前必須要編譯成機器碼。這篇文章是用於各種編譯SQLite方法的指南。

這篇文章不包含編譯SQLite的每個步驟的反饋,那樣可能會困難因為每種開發場景都不同。所以這篇文章描述和闡述了編譯Sqlite的原則。典型的編譯命令已經作為例子提供了,以期望應用開發者能夠使用這些例子作為完成他們自己定製的編譯過程的的一個指南。換句話說,這篇文章提供了想法和見解,而不是交鑰匙的解決方法。

融合VS單獨源文件

Sqlite是由超過一百個c源碼文件以及眾多的目錄下的腳本構建的。Sqlite的實現是純粹的ANSI-C,但是許多C語言源代碼文件是由輔助的C程序生成或者轉換來的,並且AWK,SED和TCL腳本會融合到完成的sqlite庫中。對Sqlite構建需要的C程序和轉換和創建C語言源碼是一個復雜的過程。

為了簡化這些,sqlite也通過一個預打包的合並後的源碼文件:sqlite3.c。這個合並文件是一個ANSI-C源碼實現整個SQLite庫的唯一文件。合並後的文件更容易處理。所有的東西都包含在這一個文件里,所以很容易進入一個更大的C或者C++程序的源碼樹。所有的代碼生成和轉換步驟都已經實現了,因此沒有輔助的C程序需要去配置和變異,也沒有腳本需要去運行。並且,因此所有哭都包含在一個翻譯單元,編譯器可以做更多高級的優化從而提升5%到10%的性能。因為這些原因,融合後的源碼文件sqlite3.c對所有程序來講都是值得推薦的。

推薦所有的應用程序使用融合文件。

直接從單獨的源碼文件中構建sqlite當然可以,但是並不推薦。對一些特殊的應用程序,可能需要修改構建程序去處理使用那些從網站上下載的預構建的源碼文件不能完成的情況。對於這些情況,推薦構建和使用一個定製過的合並文件。換句話說,即使一個工程需要以單獨的源碼文件構建sqlite,仍然推薦使用一個融合後的源碼文件作為一個中間步驟。

編譯命令行介面(CLI)

構建命令行介面需要三個源碼文件:

sqlite3.c:Sqlite融合的源碼文件

sqlite3.h:匹配sqlite3.c以及定義sqlite的c語言介面的頭文件

shell.c:命令行介面程序本身。這個c源碼文件包含一個main()的常式和每輪循環的用戶輸入的提示符並將輸入傳給sqlite資料庫引擎用於處理。

所有的上述源碼的三個文件都被包含在下載頁面的amalgamation tarball中。

為了構建CLI,簡單的將這三個文件放置在相同的目錄下然後一起編譯他們。用MSVC:
cl shell.c sqlite3.c -Fesqlite3.exe

在unix系統上(或者在windows上用cygwin或者mingw+msys)典型的命令會有些像這樣:
gcc shell.c sqlite3.c -lpthread -ldl

為了SQLite線程安全,需要pthreads庫。但是因為CLI是一個單線程的,我們可以指示SQLite構建一個非線程安全的庫並因此護綠pthreads庫:
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl

-ldl庫是在支持動態裝載時需要,例如sqlite3_load_extension() 介面和load_extension()
SQL function。如果這些特性都不要求,那麼我們也可以使用SQLITE_OMIT_LOAD_EXTENSION編譯時間選項忽略他們。
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c

有人可能想要提供其他的編譯時間選項(compile-time options),例如SQLITE_ENABLE_FTS3去全文本搜索或者SQLITE_ENABLE_RTREE用於R*樹搜索引擎擴展。而有人將正常指定一些編譯優化開關。(預編譯的CLI可以從選擇sqlite網站上使用「-Os」下載下來)有無數種可能的變數在這里。

關鍵點在這里:構建CLI需要編譯一起兩個C語言文件。shell.c文件包含入口的定義和用戶輸入的loop,而sqlite融合文件sqlite3.c包含完整的sqlite庫的實現。

編譯TCL介面

sqlite的tcl介面是一個小的模塊被添加到一般的融合文件中。結果是一個新的融合後的源碼文件,稱之為「tclsqlite3.c」。這個源碼文件是生成一個可以使用TCL

load命令去載入到一個標準的tclsh或者wish中,或者隨著sqlite構建成功生成一個單獨唯一的tclsh的共享庫所需要的。一個tcl的融合的副本被包含在下載頁的TEA
tarball中作為一個文件。

為了生成一個linux上的sqlite的TCL-loadable庫,下面的命令需要滿足:
gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl

不幸的是構建Mac OS X 和 Windows的共享庫並不是如此簡單。對於這些平台最好使用包含在TEA tarball中的configure腳本和makefile.

為了生成一個單獨的tclsh,可以用於sqlite靜態鏈接,使用如下的編譯器調用:
gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm

這里的技巧是-DTCLSH=1選項。sqlite的TCL介面模塊包含一個main的過程,用於初始化一個TCL解釋器並在以-DTCLSH=1編譯後進入到一個命令行loop。上述命令可以工作在Linux和Mac
OS X,雖然有時可能需要依賴於平台調整庫選項以及編譯的TCL的哪一個版本。

構建融合文件

下載頁提供的sqlite融合文件的版本對大多數用戶來說是足夠的。然而,一些工程可能想要或者需要構建他們自己的融合文件。一個常見的構建一個定製的融合文件的理由是為了使用特定的compile-time options來定製sqlite庫。回想sqlite融合文件中包含了許多C代碼由輔助程序和腳本生成。許多的編譯時間選項影響這一成聖代碼而且必須在融合文件組裝前提供給代碼生成器。這一系列必須傳給代碼生成器的編譯時間相關的選項會使得sqlite的發布版本各不相同,但是在寫這邊文章的時候,代碼生成器需要知道的這組選項包括:

SQLITE_ENABLE_UPDATE_DELETE_LIMIT
SQLITE_OMIT_ALTERTABLE
SQLITE_OMIT_ANALYZE
SQLITE_OMIT_ATTACH
SQLITE_OMIT_AUTOINCREMENT
SQLITE_OMIT_CAST
SQLITE_OMIT_COMPOUND_SELECT
SQLITE_OMIT_EXPLAIN
SQLITE_OMIT_FOREIGN_KEY
SQLITE_OMIT_PRAGMA
SQLITE_OMIT_REINDEX
SQLITE_OMIT_SUBQUERY
SQLITE_OMIT_TEMPDB
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_VACUUM
SQLITE_OMIT_VIEW
SQLITE_OMIT_VIRTUALTABLE

為了構建一個定製的融合文件,先下載原始的獨立源碼文件到一個unix或者類unix開發平台。確定獲取的原始源碼文件不是「預編譯過的源文件」。任何人都可以通過到下載頁或者直接從configuration management system.獲取完整的一套原始源碼文件。

假設sqlite源碼樹被存在一個名為「sqlite」的目錄下。計劃構建一個平行目錄下的名為「bld」的融合文件。首先通過運行sqlite源碼樹種的configure腳本運行或者通過製作一份源碼樹頂層的的makfile模板的一份,來構建一個合適的makefile.然後手動編輯這個Makfile去包含需要的編譯時間相關的選項。最終運行:
make sqlite3.c

在windows上使用MSVC:
nmake /f Makefile.msc sqlite3.c

sqlite3.c的make
target會自動構造一般的「sqlite3.c」合並的源碼文件,以及它的頭文件「sqlite3.h」,和包含TCL介面的融合源碼文件「tclsqlite3.c」。之後,需要的文件可以被拷貝到文件目錄下然後根據上述勾勒的過程編譯。

構建一個windows的動態鏈接庫DLL

為了在windows構建一個sqlite的dll使用,首先獲取對應的融合過的源碼文件,sqlit3.c和sqlite.h。這些可以從SQLite website上下載或者和上述告知的一樣去定製生成。

使用工作目錄下的源碼文件,一個dll可以在msvc中使用如下命令生成:
cl sqlite3.c -link -dll -out:sqlite3.dll

上述命令需要運行在msvc的MSVC Native Tools Command
Prompt.如何你已經在機器上安裝了msvc,你可能有多個版本的這種命令提示符,針對於x86和x64的自帶構建的,或者交叉編譯到ARM的。依賴要求的DLL去使用對應合適的命令提示符工具。

如果使用MinGW編譯器,命令是這樣的:
gcc -shared sqlite3.c -o sqlite3.dll

注意MinGW只生成32位的dll。另有一個分開的MinGW64工程可以用來生成64位的dll。可以推斷其命令行語法是類似的。需要注意的是最近的MSVC的版本生成的DLLs可能不能工作到WinXP或者更早版本的windows上。因此為了最大限度的兼容你的生成的dll,推薦MinGW。一個好的經驗法則是使用MinGW去生成32位的dlls,使用msvc去生成64位的dlls。

② Qt 軟體中怎麼自動加入build版本號

當進入解壓好的源碼包後,使用./configure –help命令,可以獲得相應幫助,那我們只要選取參數部分看看 -release 這個參數顯而易見,就是編譯Qt以發布版的模式進行,一般來說,最後系統完成後,庫就應該是發布版。 -release 與上面對應,自然是調試版了,如果開發的話,可以選擇它吧。 -debug-and-release 囧,上面那兩個的兒子。 -developer-build 囧,我錯了,開發者也可以用這個的,選了這個後,可以進行自動測試,不過還沒去用過,以後可以研究研究。 -opensource -commercial 這兩個參數是指是編譯是商業版本的,還是開源版本呢,視個人情況而定。 -shared -static 這兩個參數是指Qt的lib以動態還是靜態編譯生成,這自然也是視個人需要的。 -no-fast -fast 這兩個就很有關系,如果對自己的電腦性能很有信心,那就選第一個,那所有的工程文件都會生成到makefiles中,那編譯的時間,估計可以看完變形金剛了。如果選第二個,那就加入子目錄和庫到makefiles,這樣就能加快編譯的速度。 -no-largefile -largefile 顧名思義,支不支持大文件,一般來說,嵌入式里是不會有從超過4G的大文件的,那就選第一個吧。 -no-exceptions -exceptions 計算機英語夠好的人都該懂,這個自然就是異常情況,選則編譯器支持拋出異常,否則不支持。 -no-accessibility -accessibility 可訪問性的支持,說實話,這個我真不知道有什麼有用了。等哪天發現了,再來好好解釋。 -no-stl -stl 是都加入stl的支持,stl,這應該算是C++程序員應該都了解了,再不濟,那也總聽說過大名吧。 no-sql-<driver> -qt-sql-<driver> -plugin-sql-<driver> 這 個可要好好說明下,一般來說,對於一個優秀的項目開發,資料庫是必不可少的,qt也自帶了大多數資料庫驅動,可以完美地支持資料庫的使用。對於數 據庫的使用,我們可以直接qt驅動編譯進去,或者以插件的形式編譯進去。一般來說,最簡單地就是直接編譯進去,但使用插件形式的可以更加靈活,針對不同的 需求將驅動插件添加。其中,<>代表的是驅動名,如果我想直接添加sqlite的支持話,形式如下:-qt-sql-sqlite。其他名稱 可以自己查看參數里,有詳細地介紹。 -system-sqlite sqlite真受歡迎啊,當然那麼優秀的嵌入式資料庫,本人也是基本使用它來進行開發。這個參數意思是使用操作系統上的sqlite資料庫,如果是不太會移植的,可以考慮直接使用qt自帶的驅動。 -no-qt3support -qt3support 這個也是簡潔易懂,加不加對qt3的支持。 no-xmlpatterns -xmlpatterns 選擇對xml的支持,如果對網路無需求的話,就不用加了。 -no-phonon -phonon phonon是qt中處理多媒體的模塊,比如放放視頻什麼來著,不過本人從沒用過,也是根據需要選擇的。 -no-phonon-backend -phonon-backend 與上面類似,只不過這兩是以插件的形式加入支持。 -no-svg -svg 是否加入svg的支持,svg即可縮放矢量圖形。 -no-webkit -webkit 是否加入webkit的支持,這可是個好東西,不過如果跟網路不搭界的話,還是不支持吧。 -no-scripttools -scripttools 是否加入腳本工具的支持,這對php等腳本工程師來說是個很棒的參數,但對於我這樣菜鳥,就別提了。 -platform target 目標平台,這可是關鍵了,如果不注意的話,編譯出來是x86上的話,哪怕是再牛的嵌入式工程師來也沒法幫你移植到開發板上。通常,本人是linux-arm-g++。 -no-mmx -no-3dnow -no-sse -no-sse2 這四個參數是針對CPU的指令集,老實說,我也不甚了解,不過,對於開發並不是影響很大。 -qtnamespace 把qt的庫封裝到命名空間,沒啥重要用處,依個人愛好加吧。 -qtlibinfix 將所有的qt的.so庫重命名,也沒啥大用處。 -no-sql-<driver> -qt-sql-<driver> -plugin-sql-<driver> -system-sqlite 這是相當明顯的,如果這都看不出來,,囧,那您一定比我近視(本人800度近視。。) 就 是說如果是-no-XX-,就說明編譯時不選擇這個參數,如過是-qt-XX-,說明我們可以編譯直接選用qt自帶的驅動,如果是 -plugin-XX-,就是將驅動以插件形式編譯,而-system-XXX,當然是使用操作系統提供的驅動,不過那就需要您自己移植了,而且有時還要 用第三方的API,就方便來說非常麻煩,但是不排除您是牛人要好好玩玩的情況。 接下來,我們接著研究配置參數。 -qt-zlib -system-zlib 想 必經過上面的講解,參數的意思已經很快得知,就是選擇qt帶的zlib庫還是系統的zlib。zlib庫是用於文件和資料壓縮的庫,對於新入嵌入式的人來 說,可能並無太大的用處,但是在以後的實際開發中,特別是對於多媒體圖像圖形的工程師來說,就肯定用到,因為圖形圖像的壓縮都要使用或涉及到這個庫。 -no-gif -qt-gif 這是選擇gif的支持,如果選擇qt支持的話,那在用qt開發的項目中,就能顯示gif圖,gif也是比較普遍的圖片格式了,英文全稱是Graphics Interchange Format。 -no-libtiff -qt-libtiff -system-libtiff tiff是一種非常復雜的光柵圖像格式,並且有直接現成的C語言實現庫,因此選擇參數時就有了qt和system,一般來說,科學相關的開發里可能會用到。 -no-libpng -qt-libpng -system-libpng png的相關參數,一種非失真性壓縮點陣圖圖形文件格式,其實就是為了替代gif搞出來的,也是隨實際需要來選擇,當然,也有C語言實現的庫。 -no-libmng -qt-libmng -system-libmng 大汗,大汗,這可是超級罕見的東西,QT竟然也能支持,說實話,這個參數我看來就是無視的。MNG是多幀PNG動畫格式,結構極其復雜,基本沒人用。 -no-libjpeg -qt-libjpeg -system-libjpeg jpeg,這么有名的圖片格式也不用說了,隨需要選擇吧。 -no-openssl -openssl -openssl-linked SSL,Security Socket Layer,是一個安全傳輸協議,在Internet網上進行數據保護和身份確認,而OpenSSL是一個開放源代碼的實現了SSL及相關加密技術的軟體 包,在qt中,我們可以選擇直接支持,或者OpenSSL鏈接支持,這個參數也是為有需要者提供的。 以上是第三方庫的參數選擇,緊接著就是qt附加參數,在附加參數里,我們可以指定編譯的部分及加入參數來獲取信息。 -make -nomake 一 句話,說明,就說我可以這兩個參數選擇哪些我要編譯,哪些我不需要,在 libs tools examples demos docs translations這些里你可以選擇,比如examples,並不重要,可以放在-nomake後,這樣編譯過程中就不會編譯這部分了。通過適當的 選擇,我們可以大大加快編譯的速度,這對配置較差的機子來說有著積極意義。 -R <string> -l <string> 這兩個參數是為編譯時增加一個庫的運行路徑及頭文件的路徑,比如使用tslib作為開發觸摸驅動時,我們就應使用這兩個參數來指定tslib的庫路徑和頭文件路徑。 -no-rpath -rpath 這個參數比較難於理解,簡單地說,就是告訴動態載入器,到-rpath指定的目錄中尋找編譯時須要的動態鏈接庫,語法就與上面的參數結合,比如 -rpath -R/home/xxxx。 -continue 這個參數的作用就是當出現錯誤時依然進行配置編譯,換我是不會加上的。 -verbose, -v 這個參數就很眼熟,在前面的文章中有過詳細介紹,簡言之,就是顯示配置的每一步的具體信息。 -no-optimized-qmake -optimized-qmake 是否編譯生成優化過的qmake,沒啥大用,也屬於可有可無的參數。 -no-nis -nis 是否編譯NIS支持,NIS(網路信息服務)是一個提供目錄服務的RPC(遠程過程調用)應用服務,當然沒網路需要的可以再次華麗地無視。 -no-cups -cups 是 否編譯CUPS支持,是不是想問什麼用啊?~~~~囧,開列印店用的。好了,不說冷笑話,CUPS給Unix/Linux用戶提供了一種可靠有效 的方法來管理列印。它支持IPP,並提供了LPD,SMB(服務消息塊,如配置為微軟WINDOWS的列印機)、JetDirect等介面。CUPS還可 以瀏覽網路列印機。它的開發提供者是大名鼎鼎的「水果生產商」----蘋果公司。 -no-iconv -iconv 選擇是否編譯iconv支持,iconv是一個計算機程序以及一套應用程序編程介面的名稱。它的作用是在多種國際編碼格式之間進行文本內碼的轉換。這對跨語言Qt開發人員來說是很有用的,當然,考慮到中文的編碼,我也選擇加入支持。 -no-pch -pch 是 否支持預編譯過的頭文件。預編譯頭就是把一個工程中的一部分代碼,預先編譯好放在一個文件里(通常以.pch為擴展名),這個文件就稱為預編譯頭 文件。這些預先編譯好的代碼在工程開發的過程中不會被經常改變。如果這些代碼被修改,則需要重新編譯生成預編譯頭文件。媽媽經常說:不懂就要學。我說:不 懂就加上。。。 no-dbus -dbus -dbus-linked 是否編譯編譯QtDBus模塊。dbus是freedesktop下開源的Linux IPC通信機制,本身Linux 的IPC通信機制包括,管道(fifo),共享內存,信號量,消息隊列,Socket等。在Qt中DBUS是有單獨的模塊的,可見其重要性。 -rece-relocations 對於額外的庫鏈接器優化,可以減少編譯中的再定位。 no-separate-debug-info -separate-debug-info 是否存儲debug信息在.debug,一般為了查錯,還是選擇存儲吧。 -xplatform target 相當淺顯的參數,即交叉編譯的目標平台,一般來說根據你所要移植的目標板來確定。 -no-feature-<feature> -feature-<feature> 選 取qte的feature編譯,對於這個,我理解為特性,特性的描述你可以參考src/corelib/global/qfeatures.txt,在這 裡面對於每個特性都有比較充分的講解。對於特性地選擇,也是要根據開發需求進行,如果裁剪適當,能大大為qte庫瘦身。 -embedded <arch> 嵌入式平台架構選擇,可以選擇arm,mips,x86及generic,視你的目標平台決定吧。 -armfpa -no-armfpa 這個參數也只是針對ARM平台的,是否加入對於基於ARM的浮點數格式的支持,通常,這個參數在編譯時會自動選擇。 -little-endian -big-endian 目標平台的大端和小端選擇,這應該是常識了,如果這不知道,就不要來混嵌入式了 -host-little-endian -host-big-endia 主機平台的大端和小端選擇,屬於雞肋的參數,不選擇也會在配置時自動選擇。 -no-freetype -qt-freetype -system-freetype 選擇freetype,FreeType庫是一個完全免費(開源)的、高質量的且可移植的字體引擎,它提供統一的介面來訪問多種字體格式文件,在嵌入式開發中,有套可使用的字體對於中文開發至關重要,本人一般使用文泉驛字體。 -qconfig local 使用本地的qconfig配置文件來替代全部參數配置,有需要的可以去研究下,可以裁剪控制項級別的參數。 -depths <list> 顯示的像素位深,也是根據需要來進行吧。 -qt-decoration-<style> -plugin-decoration-<style> -no-decoration-<style> 這個是選擇qt的樣式風格,對於需要美化界面的項目來說,可以好好選擇下。 -no-opengl -opengl <api> 是否加入opengl的支持,OpenGL是個專業的3D程序介面,是一個功能強大,調用方便的底層3D圖形庫。不過對於一般的開發來說,似乎有很少用到的地方。 -qt-gfx-<driver> -plugin-gfx-<driver> -no-gfx-<driver> 這個是相當重要的一個參數,選擇QtGui的圖形顯示驅動,比如我們在pc上使用qvfb模擬時,就應該加入對qfvb的支持。我們可以在 linuxfb,transformed,qvfb,vnc,multiscreen這幾個中選擇。在平常的開發板上,選擇linuxfb即可。 -qt-kbd-<driver> -plugin-kbd-<driver> -no-kbd-<driver> 選擇鍵盤的驅動支持,可以支持usb鍵盤,串口鍵盤等等,也是在tty,usb ,sl5000, yopy, vr41xx ,qvfb中選擇。 qt-mouse-<driver> -plugin-mouse-<driver> -no-mouse-<driver> 滑鼠的驅動支持,一般都會選擇tslib,可以完美地支持觸摸屏,在pc,bus,linuxtp,yopy,vr41xx,tslib,qvfb中選擇吧。 -iwmmxt 加入iWMMXt指令的編譯,也只是部分XScale架構才具有。 -no-glib -glib 是否加入glib庫的支持,glib庫對應即gtk庫,就也是說加入後可以使用gtk。

③ 編譯的時候提示的是 sqlite3.c:5:21: 致命錯誤: sqlite3.h:沒有那個文件或目錄 編譯中斷。請問該怎麼做

用交叉編譯器編譯時,也會出現找不到sqlite3.h頭文件的情況,需要把sqlite3.h這個頭文件放到交叉編譯工具目錄下的 include。
sudo apt-get install libsqlite3-dev

④ 如何從android源碼中編譯webkit

android本來自帶了webkit瀏覽器,但是要對其進行custom就需要android源代碼才行, 但是在沒有源碼的情況下,那麼就需要用到ndk了,比如,我是在xoom上做custom webkit的。
1、雖然ndk提供的庫很少,而且沒有skia,但是好在有bitmap,這樣顯示慢了點,沒有硬加速,但不是不可能。
2、webkit需要的第三方庫,freetype,png,jpeg,sqlite3等雖然android源碼中有,但是ndk沒有開放,因此所有的第三方庫,freetype,png,jpeg,sqlite3,cairo,curl,fontconfig,pixman,iconv等都需要用ndk cross-compile成靜態庫,然後鏈接到最終的動態庫中。
3、選擇iconv是icu太大,而且沒有多語言的需求,選擇cairo+pixman是skia的移植性不好,而且cairo支持很多種backend。
4、編譯第三方庫需要用到autoconfig,ndk中有如何生成交叉編譯鏈的文檔,然後在configure時使用這個工具鏈就可以了,但是android用到的是bionic庫,因此會有很少的地方需要修改,有些庫也不能生成test程序,但是靜態庫是沒問題的。
5、利用ndk生成的交叉工具鏈,在加上webkit自帶的cmake編譯系統,生成webkit的動態庫是沒有問題的,當然是webkit的內核,而且有些平台相關的部分代碼需要修改。
6、但是只要是以linux平台為基礎,修改還是很容易的,我移植的webkit是先移植到linux平台上,然後移植到android平台上的,所以修改相對少了很多,但是修改大多都在WebCore/platform下,在選擇了的平台相關庫後,做相應的配置和修改。
7、其次是在WebKit目錄,這個主要是支持和使用WebCore,因此在需求不是整個瀏覽器,而只是正常地顯示網頁時,還是可以寫的比較簡單的。

⑤ linuxqt緙栬瘧

linux涓嬫墽琛宷t紼嬪簭鎬庝箞緙栬瘧榪愯岋紵

1銆佸湪Linux涓嬬殑鍛戒護琛岀紪杈戠▼搴忥細#mkdirhello//mkdir鍛戒護鍒涘緩涓涓猦ello鐩褰#cdhello//cd鍛戒護鍒囨崲鍒板垰鎵嶅壋寤虹殑hello鐩褰#vimain.cpp//鍦╤ello鐩褰曚腑鐢╲i鍒涘緩涓涓猰ain.cpp鏂囦歡灝嗕笅闈㈢殑浠g爜杈撳叆鍒癿ain.cpp鏂囦歡涓#include

鎬庢牱鍦╱buntu涓嬪畨瑁卶t宓屽叆寮忥紵

1cd~/Qtenv 2 3chmo+xqt-sdk-linux-x86-opensource-2010.04.bin 4 5./qt-sdk-linux-x86-opensource-2010.04.bin 涓轟簡鏂囦歡綆$悊鏂逛究錛屽皢sdk涔熷畨瑁呭湪Qtenv鏂囦歡澶逛腑銆 2銆佽В鍘嬫簮浠g爜鍖 鍦ㄧ敤鎴風洰褰曚笅寤虹珛涓涓猀tenv鐩褰曪紝鐢ㄤ簬瀛樻斁緙栬瘧婧愭枃浠躲 mkdir$HOME/Qtenv 鍦╭tembedded鐩褰曚笅鍒涘緩arm鍜寈86鐩褰曘傚壋寤鴻繖涓や釜鐩褰曚富瑕佹槸涓轟簡緙栬瘧涓涓鐢ㄦ埛arm寮鍙戠増鐨凲TE錛屽彟涓涓鐩褰曠敤浜庡瓨鏀劇敤浜巕vfb鐨剎86涓婹TE錛岃繖鏍鋒紨紺哄拰寮鍙戦兘寰堟柟渚褲 1cd~/Qtenv 2mkdirarmx86 鎺ヤ笅鏉ュ皢婧愪唬鐮佸寘鍒嗗埆澶嶅埗鍒癮rm鍜寈86涓嬪苟瑙e帇緙┿傝繖鏍峰仛鉶界劧嫻璐逛簡涓浜涚‖鐩樼┖闂達紙ps錛氬湪瀹誇富鏈轟笂鐨勭‖鐩樺お涓嶅奸挶浜嗭級錛屼絾鑳戒負灝嗘潵鍐嶉厤緗鍜岀紪璇戣妭鐪佸緢澶氭椂闂淬 1cd~/Qtenv 2mvqt-everywhere-opensource-src-4.6.3.tar.bz2./arm 3cd~/Qtenv/arm 4tarxjvfqt-everywhere-opensource-src-4.6.3.tar.bz2 5 6cd~/Qtenv/x86 7mvqt-everywhere-opensource-src-4.6.3.tar.bz2./x86 8tarxjvf./x86/qt-everywhere-opensource-src-4.6.3.tar.bz2 瑙e帇緙╁悗鍒嗗埆閽堝筧rm騫沖彴鍜寈86騫沖彴榪涜岄厤緗錛岄厤緗鍓嶅彲杈撳叆 ./configure-embedded-help 榪涜岄厤緗甯鍔╂煡璇錛屾牴鎹騫沖彴閰嶇疆錛屽苟緙栬瘧鍜屽畨瑁呮枃浠躲傚叾鍛戒護浠g爜濡備笅錛 1cd~/Qtenv/arm 2./configure-prefix$HOME/Qtenv/arm-embeddedarm-nomakedocs-nomakedemo-nomakeexamples 3make 4makeinstall 5 6cd~/Qtenv/x86 7./configure-prefix$HOME/Qtenv/arm-embeddedx86-nomakedocs-nomakedemo-nomakeexamples 8make 9makeinstall 鍦ㄧ粡榪囨極闀跨殑閰嶇疆銆佺紪璇戝悗灝卞畬鎴愪簡QTE鐨勫畨瑁呫傛湰浜哄湪arm鐗堢殑緙栬瘧榪囩▼涓鍑虹幇榪囦袱涓閿欒錛屽湪鍙傝冦婂湪arm-linux-gcc3.4.1涓嬬紪璇憅t-embedded-4.6.2銆嬪畬鎴愮紪璇戙 瀹屾垚緙栬瘧鍜屽畨瑁呭悗闇瑕佸圭郴緇熺殑鐜澧冨彉閲忚繘琛岃劇疆錛岃劇疆鍙浠ユ槸涓存椂鎬ц劇疆鍜屾案涔呮ц劇疆銆備復鏃惰岃劇疆鏄鐩存帴鍦ㄥ懡浠ょ獥鍙h緭鍏 1exportQTENV=$HOME/Qtenv 2exportQTXDIR=$QTENV/qtsdk 3exportQTEDIR=$QTENV/x86 4exportPATH=$QTXDIR/qt/bin:$PATH 5exportLD_LIBRARY_PATH=$QTXDIR/lib:$LD_LIBRARY_PATH 6exportQVFBDIR=$QTXDIR/qt/bin 7exportQTEMAKEDIR=$QTEDIR/bin 浠ヤ笂榪欎簺鍙橀噺鍙浠ユ牴鎹鑷宸辯殑鍠滃ソ榪涜屽炲垹銆傝繖縐嶈劇疆鏂規硶鍦ㄥ叧闂褰撳墠鍛戒護緇堢鍚庡け鏁堛 絎浜岀嶆柟寮忔槸鍦ㄥ綋鍓嶇敤鎴風殑涓葷洰褰曚笅錛岀紪杈.bash_profile鏂囦歡錛屽姞鍏ヤ笂榪板懡浠よ岋紝淇濆瓨閲嶅惎鍛戒護緇堢鍗沖彲銆

濡備綍鍦ˋRMLinux鐜澧冧腑鎼寤篞T榪愯岀幆澧冿紵

1銆佸彲浠2銆丵tCreator鍙鏄涓涓闆嗘垚寮鍙戝伐鍏鳳紝榪欎釜鐗堟湰闅忔剰錛岀綉涓婁笅灝卞彲浠ワ紝Qte涓嶆槸鐢ㄦ渶鏂幫紝鑰屾槸鏈濂界敤璺熶綘鍦↙inux寮鍙板紑鍙戜竴鏍風殑銆傞栧厛瑕佸湪Linux涓嬩氦鍙夌紪璇慟te鐨勫簱錛岀劧鍚庡啀灝哃ib榪欎簺鏂囦歡縐繪嶅湪鏉垮瓙涓婏紝鏈鍚庨氳繃浜ゅ弶緙栬瘧濂界殑搴撳幓緙栬瘧浣犲湪pc

鏍戣帗媧句笅鎬庢牱榪愯岀Щ妞嶇殑QT紼嬪簭錛

浣犲彲浠ュ弬鑰僑QLiteStudio榪欎釜Qt鍐欑殑璺ㄥ鉤鍙癝QLite綆$悊宸ュ叿,瀹冭嚜宸辨墦鍖呬簡渚濊禆鐨凲t搴,鍙浠ュ仛鍒拌В鍘嬪嵆鐢,鍏煎逛笉鍚孡inux鍙戣岀増.閬撶悊鍏跺疄璺焀indows鐗圦t紼嬪簭鑷甯Qt搴撳樊涓嶅.

緙栬瘧鍓嶇粰榪炴帴鍣ㄤ紶涓涓鍙傛暟:

璇存槑:

-Wl琛ㄧず鍛婅瘔緙栬瘧鍣ㄥ皢鍚庨潰鐨勫弬鏁頒紶閫掔粰閾炬帴鍣.

rpath鏄痝cc鐨勪竴涓鍙傛暟,褰撶▼搴忚鍔犺澆鏃,浼氭悳瀵籸path鐩褰,瀵繪壘鍏變韓搴.

rpath娣誨姞鐨勭洰褰曚俊鎮淇濆瓨鍦ㄥ彲鎵ц屾枃浠朵腑.

$ORIGIN琛ㄧず鍙鎵ц屾枃浠舵墍鍦ㄧ殑鐩褰.

涔熷氨鏄榪愯屾椂紼嬪簭浼氬厛鍘昏嚜宸辨墍鍦ㄧ殑鐩褰曠殑lib閲屽幓鍔犺澆渚濊禆搴,娌℃湁鐨勮瘽鍐嶅幓緋葷粺搴撻噷鎵.

濡傛灉浣犵殑紼嬪簭鍦ㄧ紪璇戞椂娌℃湁浼犻抮path鍙傛暟,閭d綘涔熷彲浠ョ敤patchelf鏉ヤ慨鏀逛綘紼嬪簭鐨剅path:

娉ㄦ剰:patchelf淇鏀規枃浠跺悗鍐峴trip浼氬艱嚧鏂囦歡鎹熷潖.

鎵浠ュ簲璇ュ厛鐢╯trip鍒犻櫎絎﹀彿琛ㄧ緝灝忎簩榪涘埗鏂囦歡,鐒跺悗鍐嶇敤patchelf璁劇疆rpath.

棰樺栬瘽,Android涓婃棦娌℃湁glibc搴,涔熸病鏈夊簱閾炬帴鍣╨d-linux.so.3.

濡傛灉浣犺佹妸DebianARM(濡傛爲鑾撴淳Raspbian)涓婄殑杞浠舵斁鍒癆ndroid涓婅窇,浣犱竴鏍峰彲浠ユ墦鍖呯▼搴忎緷璧栫殑鍏變韓搴,璁╃▼搴忎篃鑳借窇鍦ˋndroid涓,姣斿侾HP:

涔熷氨鏄浣犳妸搴撻摼鎺ュ櫒ld-linux-armhf.so.3鍜孭HP渚濊禆鐨勫簱閮芥斁鍒/data/local/tmp/web/lib閲,鐒跺悗璁劇疆涓鍒鍚,灝辮兘鍦ˋndroid鐨刟dbshell閲岃繍琛屾爲鑾撴淳鐨凱HP浜.

褰撶劧,浣犱篃鍙浠ョ敤patchelf璁劇疆PHP鐨剗nterpreter鍜宺path,鏁堟灉宸涓嶅:

鎬庢牱浜ゅ弶緙栬瘧涓涓猀T搴旂敤紼嬪簭錛

1.璁劇疆鐜澧冨彉閲忥細rPATH錛濇坊鍔犱負浜ゅ弶鐜澧冧笅緙栬瘧鍚庣敓鎴愮殑qmake璺寰勶紝閫氬父鍜屼富鏈虹殑緋葷粺鏄涓縐嶆灦鏋勶紝鍚屾椂闇瑕佺『淇濅氦鍙塯cc緙栬瘧鍣ㄥ湪鍦≒ATH瀹氫箟rQMAKESOEC錛濅氦鍙夌紪璇戠殑瀵硅薄鐨勭殑騫沖彴鎻忚堪鏂囦歡錛屼緥濡俶akespec/qws/linux-arm-g++rQTDIR=Qt鐨勫畨瑁呮枃浠訛紝瀛樻斁榪欏簱鍜屽ご鏂囦歡rLD_LIBRARY_PATH=瀛樻斁鐨勬槸Qt鐨勪氦鍙夌紪璇戝悗鐨勫簱錛屽噯澶囦負鐩鏍囩紪璇戦摼鎺ョ殑搴搑2銆傛墽琛岀幆澧冨彉閲弐閫氬父鎴戜滑閮戒細灝嗕互涓婄殑璁劇疆鏀劇疆鍦ㄤ竴涓猙ash鑴氭湰涓錛岄渶瑕佺殑鏃跺欏氨鎵ц屼竴涓嬨傚紑濮嬬紪璇憆1.浣跨敤qmake錛峱roject鏉ョ敓鎴愰」鐩鏂囦歡****.pror2浣跨敤qmake鏉ョ敓鎴怣akefile鏂囦歡r3浣跨敤make鏉ョ紪璇戠Щ妞嶏細浣跨敤readeif宸ュ叿鏉ュ垎鏋愮洰鏍囩郴緇熺殑浠ユ潵搴擄紝鐒跺悗鐩稿叧鐨勫簱鍒扮洰鏍囨枃浠剁郴緇熷唴銆傞氬父鎴戜滑涔熸槸閲囧彇鑴氭湰鐨勬柟寮忔潵瀹屾垚銆俽涓鑸鑰岃█錛屽嚒鏄鏈夎勫緥鐨勬垨鑰呴噸澶嶆х殑宸ヤ綔錛屾垜浠閮藉彲浠ラ噰鍙栬剼鏈鐨勬柟寮忔潵瑙e喅銆

⑥ 嵌入式開發要學哪些課程

嵌入式開發的必學課程:C語言,C++,操作系統,計算機組成原理,linux編程,51單片機,arm,硬體編程語言,模擬電路&數字電路。
嵌入式培訓分幾個階段的學習,從基礎到實戰的練習,一點一點學習和掌握這門技術。學習的課程內容包含:嵌入式高級C語言、嵌入式設備及GUI開發、嵌入式Linux高級程序設計、Linux高級網路程序設計、資料庫開發、面向對象高級語言程序設計、物聯網、CotexA53 Linux平台驅動開發及真實的企業實戰項目。
想要學好嵌入式技術,嵌入式軟體開發工程師,從事領域很寬泛,特別是工業控制、消費電子與通信設備三大領域,因為就業面很大,所以人才需求也大。現在智能硬體也比較火,這方面的發展也會大大拓展嵌入式軟體開發工程師的就業機會。再者,嵌入式硬體工程師,需求沒有嵌入式軟體開發工程師大,但因為做硬體門檻會高些,所以這個方向如果做的比較專業,薪資絕對不會低。

閱讀全文

與gosqllite交叉編譯相關的資料

熱點內容
軍官接到命令去抓地下黨 瀏覽:808
圖片或照片在電腦哪個文件夾 瀏覽:847
linux命令查看tomcat版本 瀏覽:853
android橫向自動滾動 瀏覽:474
exe的galgame用什麼打開安卓 瀏覽:492
一點停車app怎麼付費 瀏覽:661
合泰單片機hope300燒錄 瀏覽:830
程序員的照片 瀏覽:153
華為app怎麼小屏轉換大屏 瀏覽:215
廣東惠州伺服器託管雲主機 瀏覽:664
堅持鍛煉為生活解壓 瀏覽:13
雲伺服器購買了怎麼使用 瀏覽:50
什麼app可以查學校照片 瀏覽:348
python讀取文件屬性 瀏覽:145
獨居程序員可以養貓嗎 瀏覽:636
java調用泛型方法 瀏覽:676
ug60編程哪裡可以學 瀏覽:567
人機界面控制plc編程 瀏覽:635
多聲道源碼編譯 瀏覽:527
51單片機的功耗 瀏覽:375