導航:首頁 > 源碼編譯 > 靜態編譯叫什麼名字

靜態編譯叫什麼名字

發布時間:2022-12-12 12:33:29

① 如何編譯C/Fortran動態/靜態鏈接庫

首先,傳統的編譯,也就是靜態編譯是把 源文件 翻譯成目標文件,這個是一次性過程,也就是你所謂的靜態編譯。
後來的Java和.NET等語言,首先編譯成中間形式,然後運行過程中根據需要編譯成本地代碼(注意這個過程不是一次性的,下次運行重新編譯),這個就是JIT(即時編譯)技術,從即時編譯發展出了動態編譯技術
————————————
(傳統的)編譯完成後,像C/C++、Fortran、匯編等語言,可以把多個目標文件合並到一個庫文件中,這個就是靜態庫。比如常說的庫函數printf就是libc裡面的函數。
如果有了啟動函數(main),main裡面使用了printf,就可以通過靜態鏈接技術,從libc中提取出printf所在的文件加入到可執行文件中,如果printf還需要其它函數,就繼續搜索並加入列表,直到形成一個閉包。這個就是靜態鏈接。
可是靜態鏈接有個明顯的缺點,如果每個程序都需要printf,那麼printf這個函數的代碼就會同時存在在每個程序中,這樣也太佔地方了吧。所以發明了動態連接技術,其實有兩種形式。無論哪一種,都是首先記錄下需要調用printf這個函數以及所在的動態庫,等到運行的時候再載入動態庫,從動態庫中找到真正的printf去執行。
由於,動態鏈接技術需要一些額外的信息,傳統的靜態庫是不具備的,這些額外信息主要是重復載入和卸載時所需要的一些代碼,因此需要動態鏈接庫。

② int ival = 1024; 編譯器靜態編譯時,分配一塊內存,有地址,有名字ival,有值1024.他們都存在哪

這個要看情況的,
看你的這個變數定義在什麼地方,
如果是全局的那麼在BSS靜態段
如果是函數內的,那麼在堆棧上.
這個名字ival對於編譯出來的代碼沒有意義,
最後只是存放在我上面說的地方而已.
編譯器使用的是1024這個值直接進行運算的.
在某些情況下,編譯器也可能 會把這個變數直接存放到寄存器當中作為優化.
和程序的上下文有關.

③ 易語言靜態編譯和獨立編譯有什麼區別

靜態編譯是指編譯後的exe文件(可執行文件)包含了所有支持庫文件,只有單獨一個exe文件。

獨立編譯在編譯後也只有單獨一個exe文件,不過會在運行後立即釋放支持庫到Windows的臨時文件夾的子目錄中。


可能的Windows臨時文件存放目錄:

%USERPROFILE%AppData

%USERPROFILE%AppDataLocalTemp

上文的「 %UESRPROFILE% 」是指用戶目錄。輸入到電腦文件(文件資源管理器)的地址欄中可以直接打開,資料來源點此。

linux怎麼靜態編譯

關於在 Linux 環境下面對 C 語言源程序進行靜態編譯,關鍵是要看你的 C 語言源程序中都使用到了哪些系統庫函數?如果是標準的輸入、輸出庫函數,只要在命令行提示符 $ 下面執行:
gcc my_prog.c 即可(預設的可執行文件名是:a.out);如果在用戶的源程序中使用到了數學計算函數,那麼在命令行提示符 $ 下面必須執行:
gcc my_prog.c -IMATH.LIB(假設涉及到各種數學計算的數學庫的庫文件為:MATH.LIB)
如果不加上 -IMATH.LIB 選項,那麼即使你的源程序編寫得再正確,也無法正常編譯。
另外還有一個必須要注意的就是:在 Linux 的環境變數中,一定要把 INCLUDE、LIB 所在的路徑設置好(在 SHELL 文件中寫好),這樣在使用 Linux 系統時才能夠減少出錯的機會。

⑤ 靜態編譯和動態編譯有何不同

靜態編譯就是把庫函數編譯到你的程序里 這樣編譯的好處是 可以適應不同的平台 如果你是用window系統的話不建議用靜態編譯 因為這樣會使你的代碼量增大
動態編譯就是不把庫函數編譯到你的程序里

⑥ 靜態聯編和靜態編譯

聯編就是將模塊或者函數合並在一起生成可執行代碼的處理過程,同時對每個模塊或者函數調用分配內存地址,並且對外部訪問也分配正確的內存地址,它是計算機程序彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。

靜態聯編是指在編譯階段就將函數實現和函數調用關聯起來,因此靜態聯編也叫早綁定,在編譯階段就必須了解所有的函數或模塊執行所需要檢測的信息,它對函數的選擇是基於指向對象的指針(或者引用)的類型,C語言中,所有的聯編都是靜態聯編,據我所知道的,任何一種編譯器都支持靜態聯編(廢話)。

動態聯編是指在程序執行的時候才將函數實現和函數調用關聯,因此也叫運行時綁定或者晚綁定,動態聯編對函數的選擇不是基於指針或者引用,而是基於對象類型,不同的對象類型將做出不同的編譯結果。C++中一般情況下聯編也是靜態聯編,但是一旦涉及到多態和虛擬函數就必須要使用動態聯編了。下面將介紹一下多態。

多態:字面的含義是具有多種形式或形態。C++多態有兩種形式,動態多態和靜態多態;動態多態是指一般的多態,是通過類繼承和虛函數機制實現的多態;靜態多態是通過模板來實現,因為這種多態實在編譯時而非運行時,所以稱為靜態多態。

什麼是靜態編譯
靜態編譯,就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。
編輯本段靜態編譯與動態編譯的區別
動態編譯的可執行文件需要附帶一個的動態鏈接庫,在執行時,需要調用其對應動態鏈接庫中的命令。所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了系統資源。缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的運行庫,則用動態編譯的可執行文件就不能運行。
靜態編譯就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與動態編譯的可執行文件正好互補。

⑦ 易語言要推出的靜態編譯是什麼意思

2、對於「靜態編譯」,是指在編譯時,把支持庫中被程序使用的有效代碼按實際需要鏈接到EXE中,未被用到的則不鏈接。以後將不存在「即使僅僅使用一條命令也必須多帶一個1M多的支持庫文件」的現象。

應該是縮小文件的大小吧。

⑧ c語言有靜態編譯嗎

你說的是庫吧,不是頭文件,頭文件沒關系,
如果要靜態編譯,使用gcc的話,只要加上-static選項就行了

⑨ 易語言的靜態編譯是什麼意思

1、編譯是把支持庫文件和程序分開來,如果給別人去用,別人卻沒安裝易語言,就要把支持庫文件帶上給那人才能用.
2、靜態編譯就是把支持庫文件打包到程序里去.這樣,如果對方沒裝易語言也照樣可以正常使用和獨立編譯.
3、在易語言中,想把一個易語言源碼程序變成一個可執行的EXE軟體程序,有三種編譯方式:
一、編譯。
這種方式只是把源碼變成EXE文件,不把所用到的支持庫一起打包進程序中。
優點是程序體積小,可以有效地減少某些殺毒軟體的誤報;
缺點是只可以在裝有易語言的機器上使用,在沒有易語言的電腦上會說缺少支持庫。
二、獨立編譯。
在易語言4.X版中,可以把支持庫寫到EXE程序中,方便在沒有易語言的電腦上使用。
缺點是程序體積大,容易誤報。在易語言5.X版中,獨立編譯改為靜態編譯,不再把支持庫整個地打包到程序中,而把用到的命令打包,所以體積有所減小,也減少了誤報。
但是靜態編譯需要使用外部的鏈接器,如果設置不好,則無法編譯。
三、編譯成安裝文件。
這種方式的編譯,可以直接生成安裝文件,方便在其他電腦中進行軟體的安裝。
缺點是不小心就會把源碼也打包進去。

⑩ 易語言編譯和靜態編譯的區別

1、庫文件和程序文件不同,編譯是把支持庫文件和程序分開來,如果給別人去用,別人卻沒安裝易語言,就要把支持庫文件帶上給那人才能用。但是靜態編譯是把支持庫文件打包到程序里去.這樣,如果對方沒裝易語言也照樣可以正常使用和獨立編譯。

閱讀全文

與靜態編譯叫什麼名字相關的資料

熱點內容
dota2怎麼設置國服伺服器地址 瀏覽:212
單片機高電平驅動 瀏覽:115
ios多選文件夾 瀏覽:909
加強行車調度命令管理 瀏覽:243
伺服器已禁用什麼意思 瀏覽:150
部隊命令回復 瀏覽:755
神奇寶貝伺服器地圖怎麼設置 瀏覽:382
加密演算法輸出固定長度 瀏覽:862
程序員去重慶還是武漢 瀏覽:121
伺服器如何撤銷網頁登錄限制 瀏覽:980
微信公眾平台php開發視頻教程 瀏覽:628
怎麼看蘋果授權綁定的app 瀏覽:255
壓縮機單級壓縮比 瀏覽:380
linux測試php 瀏覽:971
什麼時候梁旁邊需要加密箍筋 瀏覽:40
微信清粉軟體源碼 瀏覽:717
matlabdoc命令 瀏覽:550
如何去ping伺服器 瀏覽:75
ecshop安裝php55 瀏覽:817
javaword庫 瀏覽:958