① 怎樣靜態編譯C++程序
在 C++ 中動態聯編需要虛函數的支持,這是因為虛函數的工作原理決定的,而正是因為使用了虛函數來實現動態聯編,也讓動態聯編的效率略低於靜態聯編。通常,編譯器處理虛函數的方法是: 給每個對象添加一個隱藏成員,隱藏成員保存了一個指向函數地址數組的指針 ,這個數組就是虛函數表(virtual function table, vtbl)。虛函數表中存儲了為類對象進行聲明的虛函數的地址,調用虛函數時,程序將查看存儲在對象中的 vtbl 地址,然後轉向相應的函數地址表,如果使用類聲明中定義的第一個虛函數,則程序將使用數組中的第一個函數地址,並執行具有該地址的函數。
虛函數這個概念是 C++ 的精華之一,遇到虛函數時要注意以下幾點:
1.定義一個函數為虛函數,不代表函數為不被實現的函數(可以有自己的實現)
2.定義它為虛函數是為了允許用基類的指針來調用子類的這個函數(提供了基類調用子類函數的方式)
3.定義一個函數為純虛函數,代表函數沒有被實現(聲明後面接=0,例如:virtual func() = 0 此時派生類必須要實現此虛函數)
4.具有純虛函數的類是抽象類,不能用於生成對象(即不能實例化),只能派生,它派生的類如果沒有實現純虛函數,那麼他的派生類還是抽象類。虛析構函數
虛析構函數顧名思義就是將析構函數定義為虛函數。如果我們在派生中分配了內存空間,但是基類的析構函數不是虛析構函數,就會發生內存泄漏。看下面的例子:
#include <iostream>using namespace std;class Base{public:
virtual void print(){
cout << "This is Base's print function" << endl;
}
/* 對比加與不加 virtual 析構函數的調用情況 */
~Base(){
// virtual ~Base(){
cout << "The destructor of Base" << endl;
}
};
class Derived : public Base{public:
void print(){
cout << "This is Derived's print function" << endl;
}
~Derived(){
cout << "The destructor of Derived" << endl;
}
};
int main(){
Base *p =
new Derived();
p->print();
delete p;
return 0;
}
不加 virtual 的運行結果:
加上 virtual 的運行結果:
在上面程序示加上 virtual 時編譯器還是按照 Base 類型調用了析構函數,沒有執行 Derived 類的虛析構函數,就造成了內存泄露。修改 Base 類的析構函數為虛析構函數後實現了多態,就可以確保執行正確的析構函數,完成資源的釋放
② eclipse顏色設置
剛剛安裝Eclipse,結果背景色是白色的.個人比較喜歡背景色暗一點的,最好的全黑的,就上網網路了一下如何調顏色的問題.
第一種:我們可以直接換背景色以及其他顏色(譬如:注釋,關鍵字等)
window->Preferences 搜索 color->java->Editor->Syntax Coloring->java 然後就可以下面進行顏色的變換了.(有一點不好的是,換完之後好多顏色都不協調,還要換好多.而且再往回去換,要很麻煩,所以新手還是不建議自己換)
第二種: 使用著色器
1 找到eclipse左上角的Help
2 help->Eclipse Marketplace->find中搜索"Theme"
3 搜索完成後 找到 "Eclipse Color Theme" 點擊Install
4 在彈出的對話框中,點擊「Next」,接下來選擇「I accept the terms of the license agreement」,然後點擊「Finish」等待安裝
5 .安裝過程Eclipse會彈出安全警告「Security Warning」,直接點擊「OK」繼續
6.在安裝完後Eclipse會彈出重啟軟體提示「Software Updates」,直接點擊「Yes」重啟Eclipse
7.當Eclipse重啟完成後,就可以使用著色插件(Eclipse Color Theme)了
如何使用
window->Preferences 搜索 color theme 選擇自己喜歡的->Apply->ok,就行了
(
Eclipse Marketplace是個插件應用商店,很實用的一個功能。
打開 eclipse,help--Eclipse Marketplace Client就能找到
有的eclipse中沒有這個功能就需手動添加Eclipse Marketplace Client。
help--install new software
地址欄輸入:http://download.eclipse.org/mpc/indigo/ (這里使用Eclipse indigo版本,根據你的Eclipse版本替換URL中的indigo字元串,Eclipse中各個版本的名稱見下面)
輸入回車後,選擇General Purpose Tools - Marketplace Client, 然後一路Next或Agree
下載完成後,重啟eclipse,選擇help--Eclipse Marketplace Client,就可以搜索插件下載安裝了。
③ 易語言靜態編譯和獨立編譯的區別
1、庫文件和程序文件不同,編譯是把支持庫文件和程序分開來,如果給別人去用,別人卻沒安裝易語言,就要把支持庫文件帶上給那人才能用。但是靜態編譯是把支持庫文件打包到程序里去.這樣,如果對方沒裝易語言也照樣可以正常使用和獨立編譯。
④ 易語言編譯有三種,有什麼區別
E語言編譯反三種:普通編譯、靜態編譯、編譯成安裝軟體。普通編譯:有時候會出現提示是否將文件寫出到同一目錄下。靜態編譯:直接編譯成EXE可執行文件。編譯成安裝軟體:直接編譯成一個可安裝的軟體。
⑤ codeblocks+mingw怎麼實現靜態編譯
你在設置->編譯器與調試器->連接器設置->其他鏈接器選項 裡面加:-static
這樣因該最直接。
你是不是出現丟失libgcc_s_dw2-1.dll
這個出現在用g++ 編譯C的情況,如果你只用到那個C,而不用C++的話可以修改工具鏈可執行文件中動態鏈接器:把mingw32-g++.exe改為mingw32-gcc.exe,連接器就不用加-static了。
如果把動態鏈接器改為mingw32-gcc.exe 編譯C++的時候你就要在鏈接器選項里加
-lstdc++ -static兩個選項了。
總之:如果你只用C++的話,應該不會出現這個問題。
只用C的話,建議你修改工具鏈可執行文件中動態鏈接器:把mingw32-g++.exe改為mingw32-gcc.exe
⑥ 靜態聯編和靜態編譯
聯編就是將模塊或者函數合並在一起生成可執行代碼的處理過程,同時對每個模塊或者函數調用分配內存地址,並且對外部訪問也分配正確的內存地址,它是計算機程序彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。
靜態聯編是指在編譯階段就將函數實現和函數調用關聯起來,因此靜態聯編也叫早綁定,在編譯階段就必須了解所有的函數或模塊執行所需要檢測的信息,它對函數的選擇是基於指向對象的指針(或者引用)的類型,C語言中,所有的聯編都是靜態聯編,據我所知道的,任何一種編譯器都支持靜態聯編(廢話)。
動態聯編是指在程序執行的時候才將函數實現和函數調用關聯,因此也叫運行時綁定或者晚綁定,動態聯編對函數的選擇不是基於指針或者引用,而是基於對象類型,不同的對象類型將做出不同的編譯結果。C++中一般情況下聯編也是靜態聯編,但是一旦涉及到多態和虛擬函數就必須要使用動態聯編了。下面將介紹一下多態。
多態:字面的含義是具有多種形式或形態。C++多態有兩種形式,動態多態和靜態多態;動態多態是指一般的多態,是通過類繼承和虛函數機制實現的多態;靜態多態是通過模板來實現,因為這種多態實在編譯時而非運行時,所以稱為靜態多態。
什麼是靜態編譯
靜態編譯,就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。
編輯本段靜態編譯與動態編譯的區別
動態編譯的可執行文件需要附帶一個的動態鏈接庫,在執行時,需要調用其對應動態鏈接庫中的命令。所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的運行庫,則用動態編譯的可執行文件就不能運行。
靜態編譯就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與動態編譯的可執行文件正好互補。
⑦ 易語言編譯器中的 (靜態編譯) 有什麼作用
用靜態編譯它會把支持庫文件和EXE程序一起打包,編譯出來的EXE程序可以在沒有裝易語言的電腦中運行。如果不是靜態編譯他會把支持庫文件和EXE分離開,如果失去支持文件EXE程序就無法在沒有裝易語言的電腦中運行。
⑧ 易語言靜態配置編譯器是干什麼的
易語言沒有自己的編譯器,但他用的是VC的編譯器。
非靜態編譯:
易語言因為沒有自己的靜態編譯器,如果不使用別人的編譯器,你編譯出去的軟體,將會把你軟體用到的函數和命令所屬的支持庫,DLL等...都編譯進軟體 或 軟體同目錄,即使你不是用到庫的全部命令,也會被把所有用到命令的很多支持庫,整庫編譯進去,這樣導致了軟體體積巨大,還會影響軟體效率。。
靜態編譯:
易語言因沒有自己的靜態編譯器,所以用的是VC的編譯器。使用靜態編譯的好處就是,當你調用了很多庫裡面的命令時候,不需要把這么多庫都帶上編譯出去。靜態編譯可以讓他從庫中脫離出來,只編譯被調用到的命令部分。這樣減輕了軟體的體積負擔 和 運行效率。。。
現在明白了吧!呵呵!記得採納哦!!
⑨ 動態編譯和靜態編譯有何主要區別
靜態編譯與動態編譯的區別
1、動態編譯的可執行文件需要附帶一個的動態鏈接庫,在執行時,需要調用其對應動態鏈接庫中的命令。所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的運行庫,則用動態編譯的可執行文件就不能運行。
2、靜態編譯就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與動態編譯的可執行文件正好互補。
⑩ 易語言的靜態編譯是什麼意思
1、編譯是把支持庫文件和程序分開來,如果給別人去用,別人卻沒安裝易語言,就要把支持庫文件帶上給那人才能用.
2、靜態編譯就是把支持庫文件打包到程序里去.這樣,如果對方沒裝易語言也照樣可以正常使用和獨立編譯.
3、在易語言中,想把一個易語言源碼程序變成一個可執行的EXE軟體程序,有三種編譯方式:
一、編譯。
這種方式只是把源碼變成EXE文件,不把所用到的支持庫一起打包進程序中。
優點是程序體積小,可以有效地減少某些殺毒軟體的誤報;
缺點是只可以在裝有易語言的機器上使用,在沒有易語言的電腦上會說缺少支持庫。
二、獨立編譯。
在易語言4.X版中,可以把支持庫寫到EXE程序中,方便在沒有易語言的電腦上使用。
缺點是程序體積大,容易誤報。在易語言5.X版中,獨立編譯改為靜態編譯,不再把支持庫整個地打包到程序中,而把用到的命令打包,所以體積有所減小,也減少了誤報。
但是靜態編譯需要使用外部的鏈接器,如果設置不好,則無法編譯。
三、編譯成安裝文件。
這種方式的編譯,可以直接生成安裝文件,方便在其他電腦中進行軟體的安裝。
缺點是不小心就會把源碼也打包進去。