當前位置:首頁 » 編程軟體 » 場輕松流暢編譯

場輕松流暢編譯

發布時間: 2022-07-01 16:45:34

A. 程序在pycharm上編譯運行非常順暢,但用pyinstaller打包後運行卻十分卡頓,請問有人知道這是怎麼回事嗎

 目前使用pyinstaller 打包成exe文件,對於使用大量科學計算庫的python程序,我使用的是在pycharm下IDLE下面寫程序,雖然VS2015用來寫python有一些不方便,但是我覺得這貨用來打包成exe非常的好用,寫程序使用pycharm和VS2015結合,然後在VS2015中保存py程序,然後使用pyinstaller打包成單個EXE文件,可以在其他windows系統的電腦上直接運行,目前已經測試是完全可行的。

B. 系統是怎麼編譯的 一般軟體都是用開發語言寫代碼, 然後再用編譯器編譯成文件。 但是按我目前的認識

網路

卧薪嘗膽歷史故事
shate3 | 2012-06-23 | 分享
作業不會,學霸幫你立即下載
我來解答
推薦回答
吳王闔閭打敗楚國,成了南方霸主。吳國跟附近的越國(都城在今浙江紹興)素來不和。公元前496年,越國國王勾踐即位。吳王趁越國剛剛遭到喪事,就發兵打越國。吳越兩國在槜李(今浙江嘉興西南,槜音zuì)地方,發生一場大戰。

吳王闔閭滿以為可以打贏,沒想到打了個敗仗,自己又中箭受了重傷,再加上上了年紀,回到吳國,就咽了氣。

吳王闔閭死後,兒子夫差即位。闔閭臨死時對夫差說:"不要忘記報越國的仇。"夫差記住這個囑咐,叫人經常提醒他。他經過宮門,手下的人就扯開了嗓子喊:"夫差!你忘了越王殺你父親的仇嗎?"

夫差流著眼淚說:"不,不敢忘。"他叫伍子胥和另一個大臣伯嚭(音pǐ)操練兵馬,准備攻打越國。過了兩年,吳王夫差親自率領大軍去打越國。越國有兩個很能乾的大夫,一個叫文種,一個叫范蠡(音lí)。范蠡對勾踐說:"吳國練兵快三年了。這回決心報仇,來勢兇猛。咱們不如守住城,不要跟他們作戰。"

勾踐不同意,也發大軍去跟吳國人拼個死活。兩國的軍隊在大湖一帶打上了。越軍果然大敗。越王勾踐帶了五千個殘兵敗將逃到會稽,被吳軍圍困起來。勾踐弄得一點辦法都沒有了。他跟范蠡說:"懊悔沒有聽你的話,弄到這步田地。現在該怎麼辦?"

范蠡說:"咱們趕快去求和吧。"勾踐派文種到吳王營里去求和。文種在夫差面前把勾踐願意投降的意思說了一遍。吳王夫差想同意,可是伍子胥堅決反對。

文種回去後,打聽到吳國的伯嚭是個貪財好色的小人,就把一批美女和珍寶,私下送給伯嚭,請伯嚭在夫差面前講好話。經過伯嚭在夫差面前一番勸說,吳王夫差不顧伍子胥的反對,答應了越國的求和,但是要勾踐親自到吳國去。

文種回去向勾踐報告了。勾踐把國家大事託付給文種,自己帶著夫人和范蠡到吳國去。勾踐到了吳國,夫差讓他們夫婦倆住在闔閭的大墳旁邊一間石屋裡,叫勾踐給他喂馬。范蠡跟著做奴僕的工作。夫差每次坐車出去,勾踐就給他拉馬,這樣過了兩年,夫差認為勾踐真心歸順了他,就放勾踐回國。

勾踐回到越國後,立志報仇雪恥。他唯恐眼前的安逸消磨了志氣,在吃飯的地方掛上一個苦膽,每逢吃飯的時候,就先嘗一嘗苦味,還自己問:"你忘了會稽的恥辱嗎?"他還把席子撤去,用柴草當作褥子。這就是後來人傳誦的"卧薪嘗膽"。
丟來了 | 2012-06-23
1700
500

網路知道

作業幫

寶寶知道

今日頭條

言情小說

91助手

女生秘密

汽車報價

秀美甲

LBE安全

酷狗音樂

美攝
相關問題
卧薪嘗膽類似的歷史故事65
從卧薪嘗膽這個歷史故事中大家明白了什麼?121
「卧薪嘗膽」這個成語講的什麼歷史故事?217
卧薪嘗膽的歷史故事614
卧薪嘗膽簡要的歷史故事431
<<卧薪嘗膽>>這篇歷史故事,主要寫了什麼3
卧薪嘗膽是寓言故事還是歷史故事?急!!!!71
更多相關問題>>
用作業幫一鍵提問「卧薪嘗膽...」問題
回答
卧薪嘗膽
兩千多年前,在長江下游有兩個國家,一個是吳國,一個是越國。他們都想征服對方,使自己的國家強大起來。
會稽一戰,越國打了敗仗。越王勾踐萬般無奈,只好派人向吳王夫差求和,表示願意和夫人一起去吳國,給吳王當奴僕。吳王的謀臣紛紛要求滅掉越國,免除後患。得勝的吳王非常驕傲,不聽大家的建議,答應了勾踐的請求。
勾踐夫婦來到吳國,穿上了粗布衣,住進了石頭房,給吳王養馬駕車,舂米推磨,受盡了屈辱。他們在吳國整整幹了三年,才回到自己的國家。
回國以後,越王勾踐時刻不忘報仇雪恨。白天,他親自下田耕種;晚上,就睡在柴草上。他還在屋裡掛了一隻苦膽,每頓飯前,總是要先嘗嘗它的苦味,提醒自己時刻不忘兵敗會稽的恥辱。
經過二十多年的努力,越國終於轉弱為強,出奇兵滅掉了吳國。
可愛小黎 | 2012-11-12
366
95
公元前496年,吳王派兵攻打越國,被越王勾踐打得大敗,吳王也受了重傷,臨死前,囑咐兒子夫差要替他報仇。夫差牢記父親的話,日夜加緊練兵,准備攻打越國。 過了兩年,夫差率兵把勾踐打得大敗,勾踐被包圍,無路可走,准備自殺。這時謀臣文種勸住了他,說:「吳國大臣伯喜否貪財好色,可以派人去賄賂他。」勾踐聽從了文種的建議,就派他帶著珍寶賄賂伯喜否,伯喜否答應和文種去見吳王。 文種見了吳王,獻上珍寶,說:「越王願意投降,做您的臣下伺候您,請您能饒恕他。」伯喜否也在一旁幫文種說話。伍子胥站出來大聲反對道:「人常說『治病要除根』,勾踐深謀遠慮,文種、范蠡精明強干,這次放了他們,他們回去後就會想辦法報仇的!」這時的夫差以為越國已經不足為患,就不聽伍子胥的勸告,答應了越國的投降,把軍隊撤回了吳國。 吳國撤兵後,勾踐帶著妻子和大夫范蠡到吳國伺候吳王,放牛牧羊,終於贏得了吳王的

C. 編譯程序的功能

編譯程序的基本功能是把源程序(高級語言)翻譯成目標程序。但是,作為一個具有實際應用價值的編譯系統,除了基本功能之外,還應具備語法檢查、調試措施、修改手段、覆蓋處理、目標程序優化、不同語言合用以及人-機聯系等重要功能。①語法檢查:檢查源程序是否合乎語法。如果不符合語法,編譯程序要指出語法錯誤的部位、性質和有關信息。編譯程序應使用戶一次上機,能夠盡可能多地查出錯誤。②調試措施:檢查源程序是否合乎設計者的意圖。為此,要求編譯程序在編譯出的目標程序中安置一些輸出指令,以便在目標程序運行時能輸出程序動態執行情況的信息,如變數值的更改、程序執行時所經歷的線路等。這些信息有助於用戶核實和驗證源程序是否表達了演算法要求。③修改手段:為用戶提供簡便的修改源程序的手段。編譯程序通常要提供批量修改手段(用於修改數量較大或臨時不易修改的錯誤)和現場修改手段(用於運行時修改數量較少、臨時易改的錯誤)。④覆蓋處理:主要是為處理程序長、數據量大的大型問題程序而設置的。基本思想是讓一些程序段和數據公用某些存儲區,其中只存放當前要用的程序或數據;其餘暫時不用的程序和數據,先存放在磁碟等輔助存儲器中,待需要時動態地調入。⑤目標程序優化:提高目標程序的質量,即佔用的存儲空間少,程序的運行時間短。依據優化目標的不同,編譯程序可選擇實現表達式優化、循環優化或程序全局優化。目標程序優化有的在源程序級上進行,有的在目標程序級上進行。⑥不同語言合用:其功能有助於用戶利用多種程序設計語言編寫應用程序或套用已有的不同語言書寫的程序模塊。最為常見的是高級語言和匯編語言的合用。這不但可以彌補高級語言難於表達某些非數值加工操作或直接控制、訪問外圍設備和硬體寄存器之不足,而且還有利於用匯編語言編寫核心部分程序,以提高運行效率。⑦人-機聯系:確定編譯程序實現方案時達到精心設計的功能。目的是便於用戶在編譯和運行階段及時了解內部工作情況,有效地監督、控制系統的運行。早期編譯程序的實現方案,是把上述各項功能完全收納在編譯程序之中。然而,習慣做法是在操作系統的支持下,配置調試程序、編輯程序和連接裝配程序,用以協助實現程序的調試、修改、覆蓋處理,以及不同語言合用功能。但在設計編譯程序時,仍須精心考慮如何與這些子系統銜接等問題。

D. 編譯程序是什麼意思編譯是什麼意思

編譯程序(Compiler,compiling program)也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。

解釋程序是一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行用戶程序時,它直接執行源程序或源程序的內部形式(中間代碼)。

(4)場輕松流暢編譯擴展閱讀:

結構:

編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、代碼優化、存儲分配和代碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程序各部分之間的邏輯聯系,而不是時間關系。

編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程序的具體結構時,常常分若干遍實現。對於源程序或中間語言程序,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。

可以把詞法分析作為第一遍;語法分析和語義分析作為第二遍;代碼優化和存儲分配作為第三遍;代碼生成作為第四遍。反之,為了適應較小的存儲空間或提高目標程序質量,也可以把一個邏輯步驟的工作分為幾遍去執行。

E. 如何在Dos下編譯和運行java程序

第一:首先安裝JDK。 第二:為了能使Java程序在dos下很方便的編譯和運行Java程序,就要配置其運 行的環境變數,具體步驟如下: (1)在安裝的目錄下找到你所安裝的JDK文件,在裡面找到java.exe文件,復制其路徑。 (2)滑鼠右擊我的電腦,打開屬性面板單擊高級菜單、選擇「環境變數」。 (3) 在彈出的面板中找到「系統環境變數」,在其窗口選中變數名為Path的變數。 Path是路徑設置命令,其功能是:設備可執行文件的搜索路徑,只對文件有效。當運行一個可執行文件時,DOS會先在當前目錄中搜索該文件,若找到則運行之;若找不到該文件,則根據Path命令所設置的路徑,順序逐條地到目錄中搜索該文件;Path命令中的路徑,若有兩條以上,各路徑之間以一個分號「;」開。 (4)單擊「編輯」,在彈出的窗口中的變數值的最後面粘貼上你剛才找到的路徑,中間用分號隔開,單擊確定。這樣你就可以在DOS下很輕松的編譯和運行Java程序. 如果Path路徑中前面的路徑有別的JDK版本,則在DOS下運行的是路徑比較前面的版本。 第三:編譯Java程序生成「.class」文件,在DOS下,應用DOS命令找到你所編Java程序文件(假設文件名為HelloWorld.java)的根目錄下輸入命令:javac HelloWorld.java。如果生成。「.class」文件則編譯成功。 第四:執行Java程序:接著上步操作輸入:java HelloWorld;在命令提示符上會出現運行結果。

F. 學C語言用什麼編譯器好

C-Free 還行,我就是用這個 寫C、C++程序 ,小巧,不到20M,真的不錯~~~~~~~

C-Free 5.0 專業版
C-Free是一款支持多種編譯器的專業化C/C++集成開發環境(IDE)。利用本軟體,使用者可以輕松地編輯、編譯、連接、運行、調試C/C++程序。C-Free中集成了C/C++代碼解析器,能夠實時解析代碼,並且在編寫的過程中給出智能的提示。C-Free提供了對目前業界主流C/C++編譯器的支持,你可以在C-Free中輕松切換編譯器。可定製的快捷鍵、外部工具以及外部幫助文檔,使你在編寫代碼時得心應手。完善的工程/工程組管理使你能夠方便的管理自己的代碼。

G. 如何使用ccache加快編譯

C++代碼一直以其運行時的高性能高調面對世人, 但是說起編譯速度,卻只有低調的份了。比如我現在工作的源代碼,哪怕使用Incredibuild調動近百台機子,一個完整的build也需要四個小時,恐怖!!!雖然平時開發一般不需要在本地做完整的build,但編譯幾個相關的工程就夠你等上好一段時間的了(老外管這個叫monkey around,相當形象)。想想若干年在一台單核2.8GHZ上工作時的場景 - 面前放本書,一點build按鈕,就低頭讀一會書~~~往事不堪回首。
可以想像,如果不加以重視,編譯速度極有可能會成為開發過程中的一個瓶頸。那麼,為什麼C++它就編譯的這么慢呢?
我想最重要的一個原因應該是C++基本的"頭文件-源文件"的編譯模型:
每個源文件作為一個編譯單元,可能會包含上百甚至上千個頭文件,而在每一個編譯單元,這些頭文件都會被從硬碟讀進來一遍,然後被解析一遍。

H. 如何編譯OpenWrt

Openwrt 官方正式的發行版是已編譯好了的映像文件(後綴名bin或trx、trx2),此映像文件可從Openwrt官方網站的下載頁面中輕松獲取到,連接地址為 OpenWrt官方網站。這些編譯好的映像文件是基於默認的配置設置,且只針對受支持的平台或設備的。因此,為什麼要打造一個自己的映像文件,理由有以下四點:
您想擁有一個個性化的配置OpenWrt(彰顯個性,在朋友圈子裡顯擺顯擺,開個玩笑);
您想在實驗性的平台上測試OpenWrt;
您參與測試或參與開發OpenWrt的工作;
或者,最簡單的目的就是為了保持自己的Openwrt為最新版本;
若想實現上述目的,其實很簡單,按下述文字即可成功編譯出一個您的Openwrt來。
准備工作
在開始編譯Openwrt之前需要您做些准備工作;與其他編譯過程一樣,類似的編譯工具和編譯環境是必不可少的:
一個構建OpenWrt映像的系統平台,簡單說就是准備一個操作系統(比如Ubuntu、Debian等);
確保安裝了所需的依賴關系庫, (在debian系統中就是安裝各種需要的軟體包)
OpenWrt源代碼副本
首先, 開機登陸到支持編譯Openwrt的操作系統(廢話了)。實體機或者虛擬機(Vmware 或者 Qemu)里的操作系統都行,這里推薦使用Linux系統。 bsd和mac osx系統也可以編,但不推薦,且未驗證是否可編譯成功。下文假定您使用的是Debian操作系統,使用 apt-get 來管理包. 替代的選擇是 Ubuntu (分支 Kubuntu, Xubuntu 等即可)。
第二步, 就是安裝所需要的各種軟體包, 包括編譯器,解壓工具,特定的庫等. 這些工作可以簡單的通過鍵入以下命令 (通常需要root 或者是 sudo 許可權),以root許可權安裝下列軟體包(可能並不完整,會有提示,提示缺少即裝就可以了):
32位(x86)請執行下列命令:
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev

64位(x86_64)請執行下列命令(多裝了哪些庫或軟體包呢?請您仔細看一看哦):
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
lib32gcc1 libc6-dev-i386

參考 本列表中 所列的編譯環境所需要軟體包或庫。
某些依賴的為庫或軟體包也許操作系統中已經安裝過,此時apt-get會作出提示(提示您忽略或重新安裝的),別緊張,放輕鬆些,編譯Openwrt不會像編譯DD-WRT那樣難的(至少本人是體會到了編譯DD-WRT的難)。
最後下載一份完整的 Openwrt 源碼到編譯環境中。關於Openwrt的源代碼下載,途徑有二,一是通過 svn ,一是通過 git,建議使用 svn ,因為Openwrt主要以 svn 來維護Openwrt系統的版本。另外,請注意Openwrt中不同的分支版本,一個是用得較多的開發快照,俗稱 trunk,二是穩定版,俗稱 backfire。
安裝Subversion
若你想通過svn下載源代碼,你需安裝 Subversion。Subversion,或稱SVN, 是OpenWrt的project中用來控製版本的系統,它非常類似的 CVS的界面和使用條款。 執行下述命令即可安裝SVN,很容易的:
# apt-get install subversion

Subversion安裝完畢,通過SVN命令可獲取得到一份OpenWrt純凈源代碼。您還得創建一個目錄以便存放獲取得到的Openwrt源代碼,要獲取源代碼你還得輸入subversion命令來獲取 (svn里這種操作稱之為'check out') 。命令很簡單的,繼續看下去就能見到了,別著急,耐心點兒。
編譯流程
編譯專屬於您的設備的特定Openwrt固件以一下五個步驟:
通過Subversion命令獲得源代碼;
更新(或安裝) package feeds〔package feeds無法確切翻譯,待譯吧);
創建一個默認配置以檢查編譯環境是否搭建好了 (假如需要的話);
用Menuconfig來配置即將編譯生成的固件映像文件的配置項;
最後開始編譯固件;
下載源代碼
最後,下載一份完整的OpenWrt源代碼。你可選擇:
下載穩定發行版,或
下載開發版 (俗稱"trunk"版)。
使用發行版的源碼
截止本文時, Openwrt公開發行的穩定版為 OpenWrt 10.03 "backfire"。此版本是最穩定的,但也許不包括最新更新的補丁或最新編寫的出的新功能。
下述代碼即舉例說明了通過svn從brandkfire獲得backfire源代碼(此版本意思是從trunk分支的補丁也在backfire版本中了,即包含修復補丁):
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/branches/backfire

註解: 上述svn命令將在當前目錄創建一個 OpenWrt/backfire/ 子目錄,此目錄包含此命令獲取到的源代碼。
您也可以通過下述命令,下載不含修復補丁的backfire的原版源碼:
# svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03

使用開發版源代碼
當前的開發版本分支(trunk)已包含最新的實驗補丁。此分支或許還突破了Openwrt原來所不支持的硬體設備的限制哦,驚喜的同時也有風險存在。因此,編譯trunk版,慎之~
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/trunk/

跟進並更新源代碼
因Openwrt的源代碼隨時都會變動,故此命令將確保您所獲取得到的源碼的最新性。下述假設您用的是backfire版本的源碼:
## Here, backfire is the directory name of the current release branch you're tracking
# cd OpenWrt/backfire/
# svn up

'svn up' 命令用於更新SVN上更新了,但本地尚未更新的這部分源代碼(本人實踐證明此命令會將本地源碼與SVN上的源碼先比較,若SVN有更新才會下載更新的部分,很實用的一個命令)。如果未指定目標路徑,則此命令將更新當前目錄及當前目錄的子目錄內的源碼。
Feeds下載
Feeds即為包含到你的OpenWrt環境中的額外軟體包的索引之類的。(feed譯名很多,莫衷一是,至2008年底為止,還沒有一個十分通用而備受認可的中文譯名;所以此文當中我們用英文feed來稱呼)。 最主要的Feeds有以下三個:
'packages' - 路由的基本功能,
'LuCI' - OpenWrt默認的GUI(WEB管理界面), 及
'Xwrt' - 其他的GUI。
一般情況,你至少需要含 'packages' 和 'LuCI'兩個Feeds。
下載完feeds之後, (為編譯OpenWrt的recipies額外的預定義包) 您可以檢查哪些feeds要包括在內。編輯在你的編譯環境的根目錄下的'feeds.conf.default'文件。
然後使用下列命令開始下載(註:可能你需要先運行cd trunk進入trunk目錄才能成功執行下列命令):
# ./scripts/feeds update -a

在此之後,下載的軟體包需要安裝。亦即指的下邊的命令啦。若路過下邊的install命令則後續make menuconfig將無法成功執行!(註:可能你需要先運行cd trunk進入trunk目錄才能成功執行下列命令):
# ./scripts/feeds install -a

只需編輯Feeds的配置文件或運行更新命令,即可很方便地更新或添加新的實驗性的packages到源碼中並編譯到OpenWrt固件去。
注意:請老壇友及舊的新聞組成員們注意了,這一步取代了創建符號鏈接symlinks的老辦法哦。
更新Feeds
諸如此類源碼,你得定期更新Feeds。 通過如上相同的命令:
# ./scripts/feeds update -a
# ./scripts/feeds install -a

注意:若你清楚地知道你不需添加新的packages到menuconfig中去,那麼你可在更新Feeds時跳過這一步。
生成配置
You may not have to make configration always after updating sources and feeds, but making it ensures that all packages from source and feeds are correctly included in your build configuration.
Defconfig
下一步是檢查編譯環境,若可進行編譯則生成默認配置:
# make defconfig

若defconfig回顯提示缺少軟體包或編譯庫等依賴,則按提示安裝所缺軟體包或庫等即可,不難的,細心點就行。
Menuconfig
menuconfig是一個基於文本的工具,它處理選擇的目標(需要還是不需要)、編譯生成軟體包(openwrt下是IPKG格式)以及內核選項(編譯成模塊還是內核)等等
# make menuconfig

在你離開並保存配置文件(默認都是.config)後,將自動配置依賴關系,讓你可以著手編譯更新的固件。
大眾可通過'menuconfig'這一簡單的圖形化的配置環境,非常輕松地編譯出專屬您本人的OpenWrt固件。
可以用'menuconfig',以開發的意圖來編譯OpenWrt的固件,為自己(個人)創造一個結構簡單但是功能強大的環境。(上句實在難翻譯,只能意譯。並且也請大家都學習下編譯OP固件,讓以OP固件盈利的人丟掉那骯臟的飯碗!)
Menuconfig或多或少有些難以說明的地方,即使是最專業的配置,也可以尋求幫助並加以解決。 需要你指定何種目標平台,要包含的package軟體包和內核模塊等均需要你指定,配置標準的過程中會包括修改:
目標平台(即路由器何種架構,BCM呢還是AR均可選擇)
選擇要包含的package軟體包
構建系統設置
內核模塊
Target system is selected from the extensive list of supported platforms, with the numerous target profiles – ranging from specific devices to generic profiles, all depending on the particular device at hand. Package selection has the option of either 'selecting all package', which might be un-practical in certain situation, or relying on the default set of packages will be adequate or make an indivial selection. It is here needed to mention that some package combinations might break the build process, so it can take some experimentation before the expected result is reached. Added to this, the OpenWrt developers are themselves only maintaining a smaller set of packages – which includes all default packages – but, the feeds-script makes it very simple to handle a locally maintained set of packages and integrate them in the build-process.
假如你需要LuCI, 要到Administration 菜單里,在LuCI組件的子菜單下, 並選擇: luci-admin-core, luci-admin-full, and luci-admin-mini組件包。
假如你不需要PPP,你可到Network菜單下取消對它的選擇,以便編譯時不包含此組件。
Menuconfig用法: 確保這些組件包是以 '*'星號標記而不是 'M'標記。
如果你是以星號 '*'標記該組件包, 則該組件包將編譯進最終生成的OpenWrt固件中。
如果你僅以 'M'標記該組件包, 則該組件包將不會編譯進最終生成的OpenWrt固件中。
The final step before the process of compiling the intended image(s) is to exit 'menuconfig' – this also includes the option to save a specific configuration or load an already existing, and pre-configured, version.
Exit and save.
Source Mirrors
The 'Build system settings' include some efficient options for changing package locations which makes it easy to handle a local package set:
Local mirror for source packages
Download folder
In the case of the first option, you simply enter a full URL to the web or ftp server on which the package sources are hosted. Download folder would in the same way be the path to a local folder on the build system (or network). If you have a web/ftp-server hosting the tarballs, the OpenWrt build system will try this one before trying to download from the location(s) mentioned in the Makefiles . Similar if a local 'download folder', residing on the build system, has been specified. The 'Kernel moles' option is required if you need specific (non-standard) drivers and so forth – this would typically be things like moles for USB or particular network interface drivers etc.
編譯固件
萬事具備,只欠東風,通過下面簡單的make命令來編譯:
# make

在多核電腦中編譯
具有多核CPU處理器的電腦進行編譯,使用下述參數可令編譯過程加速。 常規用法為 <您cpu處理器的數目 + 1> – 例如使用3進程來編譯 (即雙核CPU), 命令及參數如下:
# make -j 3

後台編譯
若你在這個系統內編譯OpenWrt的同時還處理其他,可以讓閑置的I/O及CPU來在後台編譯固件 (雙核CPU):
# ionice -c 3 nice -n 20 make -j 2

編譯簡單的基本的軟體包
當你為OpenWrt開發或打包軟體包,編譯簡單的基本的軟體包可以很輕易地編譯該軟體包 (例如, 軟體包cups):
# make package/cups/compile V=99

一個在Feeds里的軟體包大約是這樣子的:
# make package/feeds/packages/ndyndns/compile V=99

編譯錯誤
如果因某種不知道的原因而編譯失敗,下面有種簡單的方法來得知編譯到底錯在哪裡了:
# make V=99 2>&1 |tee build.log |grep -i error

上述編譯命令意為:V99參數,將出錯信息保存在build.log,生成輸出完整詳細的副本(with stdout piped to stderr),只有在屏幕上顯示的錯誤。
舉例說明:
# ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 \
|tee build.log |egrep -i '(warn|error)'

The above saves a full verbose of the build output (with stdout piped to stderr) in build.log and outputs only warnings and errors while building using only background resources on a al core CPU.
一鍵編譯
即使用腳本來編譯Openwrt固件。許多朋友編譯Openwrt是用的腳本來編譯的
生成的固件在哪
編譯成功後所生成的固件文件位於bin目錄下,可用如下命令查看:
# cd bin/
# ls */

清理
編譯OpneWrt時你可能需要一個清潔干凈的編譯環境。 以下操作有利用編譯工作:
清潔
清潔trunk/ 目錄,在編譯過程中使用「make clean」命令即可。 此命令將刪除bin目錄和build_dir目錄下的所有文件及文件夾
## See CAUTION below
# make clean

I. 淺談怎樣加快C++代碼的編譯速度

C++代碼一直以其運行時的高性能高調面對世人, 但是說起編譯速度,卻只有低調的份了。比如我現在工作的源代碼,哪怕使用Incredibuild調動近百台機子,一個完整的build也需要四個小時,恐怖!!!雖然平時開發一般不需要在本地做完整的build,但編譯幾個相關的工程就夠你等上好一段時間的了(老外管這個叫monkey around,相當形象)。想想若干年在一台單核2.8GHZ上工作時的場景 - 面前放本書,一點build按鈕,就低頭讀一會書~~~往事不堪回首。 可以想像,如果不加以重視,編譯速度極有可能會成為開發過程中的一個瓶頸。那麼,為什麼C++它就編譯的這么慢呢? 我想最重要的一個原因應該是C++基本的「頭文件-源文件」的編譯模型: 1.每個源文件作為一個編譯單元,可能會包含上百甚至上千個頭文件,而在每一個編譯單元,這些頭文件都會被從硬碟讀進來一遍,然後被解析一遍。 2.每個編譯單元都會產生一個obj文件,然後所以這些obj文件會被link到一起,並且這個過程很難並行。 這里,問題在於無數頭文件的重復load與解析,以及密集的磁碟操作。 下面從各個角度給出一些加快編譯速度的做法,主要還是針對上面提出的這個關鍵問題。 一、代碼角度 1、在頭文件中使用前置聲明,而不是直接包含頭文件。 不要以為你只是多加了一個頭文件,由於頭文件的「被包含」特性,這種效果可能會被無限放大。所以,要盡一切可能使頭文件精簡。很多時候前置申明某個namespace中的類會比較痛苦,而直接include會方便很多,千萬要抵制住這種誘惑;類的成員,函數參數等也盡量用引用,指針,為前置聲明創造條件。 2、使用Pimpl模式 Pimpl全稱為Private Implementation。傳統的C++的類的介面與實現是混淆在一起的,而Pimpl這種做法使得類的介面與實現得以完全分離。如此,只要類的公共介面保持不變,對類實現的修改始終只需編譯該cpp;同時,該類提供給外界的頭文件也會精簡許多。 3、高度模塊化 模塊化就是低耦合,就是盡可能的減少相互依賴。這里其實有兩個層面的意思。一是文件與文件之間,一個頭文件的變化,盡量不要引起其他文件的重新編譯;二是工程與工程之間,對一個工程的修改,盡量不要引起太多其他工程的編譯。這就要求頭文件,或者工程的內容一定要單一,不要什麼東西都往裡面塞,從而引起不必要的依賴。這也可以說是內聚性吧。 以頭文件為例,不要把兩個不相關的類,或者沒什麼聯系的宏定義放到一個頭文件里。內容要盡量單一,從而不會使包含他們的文件包含了不需要的內容。記得我們曾經做過這么一個事,把代碼中最「hot」的那些頭文件找出來,然後分成多個獨立的小文件,效果相當可觀。 其實我們去年做過的refactoring,把眾多DLL分離成UI與Core兩個部分,也是有著相同的效果的 - 提高開發效率。 4、刪除冗餘的頭文件 一些代碼經過上十年的開發與維護,經手的人無數,很有可能出現包含了沒用的頭文件,或重復包含的現象,去掉這些冗餘的include是相當必要的。當然,這主要是針對cpp的,因為對於一個頭文件,其中的某個include是否冗餘很難界定,得看是否在最終的編譯單元中用到了,而這樣又可能出現在一個編譯單元用到了,而在另外一個編譯單元中沒用到的情況。 之前曾寫過一個Perl腳本用來自動去除這些冗餘的頭文件,在某個工程中竟然去掉多達了5000多個的include。 5、特別注意inline和template 這是C++中兩種比較「先進」的機制,但是它們卻又強制我們在頭文件中包含實現,這對增加頭文件的內容,從而減慢編譯速度有著很大的貢獻。使用之前,權衡一下。

熱點內容
銳志哪個配置性價比最高 發布:2025-02-12 17:38:43 瀏覽:917
智能推送演算法 發布:2025-02-12 17:38:41 瀏覽:834
拍照上傳器 發布:2025-02-12 17:34:29 瀏覽:651
androidweb框架 發布:2025-02-12 17:32:45 瀏覽:75
安卓編程賀卡 發布:2025-02-12 17:32:44 瀏覽:837
php獲取資料庫的欄位 發布:2025-02-12 17:29:02 瀏覽:765
伺服器地址消失 發布:2025-02-12 17:23:36 瀏覽:950
後台執行php腳本 發布:2025-02-12 17:21:45 瀏覽:470
spring編程式事務 發布:2025-02-12 17:16:55 瀏覽:397
nginx禁止ip訪問 發布:2025-02-12 17:15:14 瀏覽:273