在參照this answer:「在運行時動態鏈接但靜態感知」 - 如何控制加載哪個.so文件?
有兩種Linux的C/C++庫類型。
靜態庫(
*.a
)是其與連接併成爲本申請的一部分對象代碼檔案。它們被創建爲 ,並可以使用ar(1)
命令進行操作(即ar -t libfoo.a
將列出庫/檔案中的文件)。動態鏈接的共享對象庫(
*.so
)可以以兩種方式使用。
- 共享對象庫可以在運行時動態鏈接,但靜態感知。在編譯/鏈接階段,庫必須可用。共享對象不包含在 二進制可執行文件中,但與執行有關。
- 共享對象庫可以在執行期間使用動態鏈接加載器系統動態加載/卸載和鏈接功能。
是什麼意思做出動態 LIB tied to the execution?
這是否像Windows manifest files,允許應用程序加載在特定的dll?
什麼是控制.so加載的機制?
必須有這樣一種機制,否則「編譯」.so是唯一一個允許加載,使其失敗的目的,使其動態?
在Windows中,一個可能更簡單明瞭的等價物將是[* import library *](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682592(v = vs。 85).aspx),從模塊定義文件或dll生成,並鏈接到任何模塊想要拉入相關模塊。 – WhozCraig
@WhozCraig你能推薦一個網站,用圖解釋Linux應用程序如何加載和使用**。so **文件? – Adrian