澄清.so 和.dylib 檔案副檔名之間的差異
概述:
在macOS 中,動態函式庫可以是打包為.so 共用物件或.dylib 動態可載入模組。了解這兩種格式之間的差異對於有效的庫管理至關重要。
概念差異:
-
物件類型: .dylib 檔案是Mach-O 共用程式庫(MH_DYLIB),而.so 檔案是可載入模組(MH_BUNDLE),通常用於作為外掛程式或擴充應用程式。
-
連結: .dylib 檔案可以使用常規連結標誌靜態鏈接,而 .so 套件不能以這種方式連結。
在.so 和.so 之間選擇.dylib:
-
使用.dylib: 對於不用於動態載入的共享庫,例如係統庫或多個應用程式之間共享的程式碼。
-
使用.so: 動態載入的外掛程式或需要存取應用程式的應用程式擴充API.
編譯:
- .dylib 共享函式庫:在編譯器中使用-dynamiclib 標誌。
- .so可載入套裝:使用-bundle 標誌
支援與歷史:
-
載入:.dylib 最初與動態載入不相容,但支援已在macOS 10.4中添加。兩種檔案格式現在都支援 dlopen、dlclose 和其他 DL 功能。
-
舊版: 從歷史上看,.so 和 .dylib 之間的差異更為顯著。 .so 捆綁包專門用於動態加載,而 .dylib 共享庫只能靜態連結。隨著時間的推移,這些限制已被取消,使得文件格式之間的選擇更加細緻。
其他資訊:
- 在macOS 中,「捆綁包」也可以指具有包含可執行程式碼和資源的特定結構的目錄。這些目錄不應與用於庫和插件的 Mach-O 捆綁包混淆。
參考文獻:
- Fink 移植指南
- ld(1) 和dlopen(3)
- ld(1) 和dlopen(3)
-
ld(1) 和dlopen(3) >動態函式庫程式主題Mach-O程式主題
以上是macOS 中的 .so 與 .dylib:主要區別是什麼以及何時應該使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!