如何在linux平臺生成靜態鏈接庫與動態鏈接庫?
動態庫和靜態庫在Win下,動態庫以.DLL結尾,靜態庫以.lib結尾。在linux下,動態庫文件以.so結尾,靜態庫以.a結尾。在Mac下,動態庫以.dylib結尾,靜態庫以.a結尾。動態庫的優勢和劣勢動態函數庫在編譯的時候并沒有被編譯進目標代碼中,你的程序執行到相關函數時才調用該函數庫里的相應函數,因此動態函數庫所產生的可執行文件比較小。由于函數庫沒有被整合進你的程序,而是程序運行時動態的申請并調用,所以程序的運行環境中必須提供相應的庫。 動態函數庫的改變并不影響你的程序,所以動態函數庫的升級比較方便。某個程序在運行時要調用某個動態鏈接庫函數的時候,OS首先查看所有正在運行的進程,找找看是否已經有人載入了這個庫。如果有的話,直接用。如果沒有才會載入。這樣的第一個優點就是節省內存空間。動態調入意味著是等需要的時候才調入內存,而不是不管用不用都要先放到內存里來。我如果想要升級某個軟件。如果升級的位置是在dll里,那軟件其他的部位不需要重新編譯鏈接。所以升級方便。靜態庫的優勢和劣勢利用靜態函數庫編譯成的文件比較大,因為整個函數庫在編譯時都會被整合進目標代碼中,他的優點就顯而易見了,即編譯后的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。當然這也會成為他的缺點,因為如果你靜態鏈接的函數庫改變了,那么你的程序必須重新編譯。代碼更精簡,因為不必做版本檢查。程序分發時文件個數少,因為靜態鏈接到源文件里了。只編譯進來庫中所用的部分,而不用整個庫。生成的binary占空間更大。重復的庫可能出現在多個進程,浪費內存。庫內部更新的話需要重新編譯binary。Linux平臺的靜態庫靜態庫的生成靜態庫的鏈接Linux平臺的動態庫動態庫的生成動態庫的鏈接Windows平臺的靜態庫靜態庫的生成/MT 使用 LIBCMT.lib 編譯以創建多線程可執行文件。 生成靜態庫lib。 靜態庫的鏈接1、在使用鏈接庫的代碼開頭加入,第二行是要調用的鏈接庫里的函數:2、將要調用的鏈接庫的lib放入項目源代碼中,然后編譯。(編譯的時候不需要dll。這里把靜態部分lib編譯進了exe,但動態庫dll還沒用。)3、運行之前要把dll放到exe目錄下。Windows平臺的動態庫動態庫的生成/MD 使用 MSVCRT.lib 編譯以創建多線程 DLL。生成動態庫。 動態庫的鏈接1、 LoadLibrary(或MFC 的AfxLoadLibrary),裝載動態庫。2、 GetProcAddress,獲取要引入的函數,將符號名或標識號轉換為DLL內部地址。3、 FreeLibrary(或MFC的AfxFreeLibrary),釋放動態鏈接庫。