Windows與Linux動態庫的兩種加載方式

Windows上的動態庫(dll)加載方式有兩種:
1.靜態加載,運用#pargma comment(lib, "xxx.lib")方式,這種方式需要 頭文件,lib文件和dll文件配合使用,運行時是直接將動態庫加載到內存中的,運用起來也比較方便
2.動態加載,運用LoadLibrary(dllName)方式,這種方式只需要頭文件和dll文件就可以運行,需要時加載,不需要是用FreeLibrary(dllName)進行釋放。

Linux繫上的動態庫(so)加載方式也有兩種:
1.靜態加載,程序編譯的時候加上“-l”選項,指定其所依賴的動態庫,動態庫的生存週期等於進程的生存週期,其加載時機不靈活,但是運用方式,可以直接調用
2.動態加載,主程序編譯時候要加入 -ldl (指定dl庫),要生成動態庫編譯需要加入-shared -fPIC,用dlopen()函數以指定模式打開指定的動態連接庫文件,並返回一個句柄給調用進程。使用dlclose()來卸載打開的庫。能夠確保多個進程調用時內存中只存在一份,共享庫計數會根據調用的多少遞加1。標誌指明是否立刻計算庫的依賴性。如果設置爲 RTLD_NOW 的話,則立刻計算;如果設置的是 RTLD_LAZY,則在需要的時候才計算。

另外:如果是動態加載動態庫,則Linux下用ldd來查看程序依賴時,是不列出動態庫的,因爲他是隨用隨加載的,但是如果用的是靜態加載動態庫,怎在Linux下用ldd來查看程序依賴時,會列出所依賴的動態庫。
Mac OS X系統下查看程序依賴用otool命令,otool -L main;列表main所依賴的庫,如果main動態加載了動態庫,則不會列表。

發佈了58 篇原創文章 · 獲贊 83 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章