91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中靜態鏈接與動態鏈接怎么用

發布時間:2022-03-06 10:45:13 來源:億速云 閱讀:337 作者:小新 欄目:開發技術

小編給大家分享一下C++中靜態鏈接與動態鏈接怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

    一、GCC工作流程

    預處理:把#頭文件展開,進行宏替換,去掉注釋(生成.i文件)

    編譯:把預處理后的文件生成匯編文件(.s文件),主要是檢查語法、語義問題

    匯編:把匯編文件生成目標文件(.o文件)

    鏈接:將函數庫中相應的代碼組合到目標文件,生成可執行文件(默認a.out文件)

    o文件不會立即執行,因為可能出現:一個.cpp文件中的函數引用了另一個.cpp文件中定義的符號/調用了某個庫文件中的函數。鏈接的目的就是將這些文件對應的目標文件鏈接成一個整體,從而生成可執行文件。

    二、靜態鏈接與動態鏈接

    程序庫:包含數據和執行代碼的文件,不能單獨執行,可以作為程序庫的一部分來完成某些功能。

    庫的存在可以使程序模塊化,可以加快程序的再編譯,實現代碼復用,便于更新程序

    程序庫又分為靜態鏈接庫與動態鏈接庫

    1、靜態鏈接

    在鏈接階段,將匯編生成的.o文件和所需要的庫一起鏈接打包到可執行文件中去,程序運行的時候不再調用其它的庫文件

    一個靜態庫,可以看作是一些目標代碼的集合,在可執行程序運行前就已經加入到執行代碼中,成為執行程序的一部分。

    靜態鏈接的優點:對運行環境依賴小,具有較好的兼容性。

    靜態鏈接的缺點:生成的程序較大,需要更多的系統資源(所需的所有庫都被打包進可執行文件了),在裝入內存中消耗更多時間

    一旦庫函數有了更新,必須重新編譯應用程序

    C++中靜態鏈接與動態鏈接怎么用

    此處,我們制作實現加減乘除的靜態庫,首先編寫add.c、sub.c、mul.c、div.c文件及對應.h文件,另外編寫text.c文件進行測試。gcc -c 生成目標文件.o,然后將.o文件打包,制作靜態庫libtext.a

    C++中靜態鏈接與動態鏈接怎么用

    2、動態鏈接

    靜態庫存在的問題:

    (1)若兩個.o文件都使用同一個靜態庫,那么內存中會拷貝2份靜態庫的代碼,然 后分別與兩個.o文件一起打包到可執行文件中,造成空間浪費。

    舉個例子:某個靜態庫占1M內存,有2000個.o文件使用這個靜態庫,內存中有2000個靜態庫的代碼(將近2000GB),空間浪費嚴重。

    (2) 所需的庫被拷貝到可執行文件中去了,如果某個庫更新了,則與它相關的所有可執行文件都需要重新編譯。

    為了解決這兩個問題,引出動態庫(又稱共享庫),動態庫在程序編譯時,并不會被鏈接到目標代碼中,而是在運行時載入,不同應用程序如果調用相同的的庫,內存里只有一份共享庫的實例,避免了浪費。由于動態庫在運行時才被載入,也解決了靜態庫對程序的更新、部署和發布帶來的馬糞,用戶只需要更新動態庫即可。

    動態鏈接的優點:鏈接時,僅僅建立與所需庫函數之間的關系;

    在程序運行時才將所需資源調入可執行程序;

    簡化程序的升級,有較小的程序體積;

    實現進程之間的資源共享,內存中只有一份動態庫的實例,避免充分拷貝

    動態鏈接的缺點:依賴動態庫,不能獨立運行

    動態庫依賴版本問題嚴重

    同樣的,我們制作制作實現加減乘除的動態庫。

    C++中靜態鏈接與動態鏈接怎么用

    C++中靜態鏈接與動態鏈接怎么用

    我們把動態庫.so和測試文件.c拷貝當前目錄,使得系統加載可執行文件時,能夠知道所依賴的庫的名字,但是還需要找到動態庫的絕對路徑,此時需要系統動態載入器(dynamic linker/loader)。對于elf格式的可執行程序,是由ld-linux.so*來完成的。搜索elf文件的DT_PATH段(環境變量)LD_LIBRARY_PATH,/etc/ld.so.cache文件列表,/urs/lib目錄找到庫文件后將其載入內存。

    動態庫加載失敗的解決辦法:這里給出兩個解決辦法,來找到動態庫

    C++中靜態鏈接與動態鏈接怎么用

    C++中靜態鏈接與動態鏈接怎么用

    以上是“C++中靜態鏈接與動態鏈接怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    c++
    AI

    稷山县| 民丰县| 博客| 额尔古纳市| 西充县| 马尔康县| 纳雍县| 吉水县| 邳州市| 天气| 富平县| 泗阳县| 嵩明县| 呼玛县| 修文县| 巴林左旗| 温泉县| 保定市| 修水县| 绥阳县| 金沙县| 雷波县| 子长县| 乐东| 永靖县| 呼图壁县| 冀州市| 社会| 台北市| 咸阳市| 富平县| 定陶县| 黄梅县| 北票市| 思茅市| 开平市| 介休市| 西畴县| 安平县| 那坡县| 连山|