根據文檔,dlopen與dlsym
一起使用來加載庫,並獲取指向符號的指針。dlopen vs標準動態鏈接的用例是什麼?
但是,這已經是動態加載器/鏈接器所做的。此外,這兩種方法都基於ld.so。
有實際上似乎使用dlopen
時是兩個區別:
- 庫可以有條件地加載。
- 編譯器不知道我們正在使用的符號(類型,原型...),因此不檢查潛在的錯誤。順便說一句,這是實現自省的一種方式。
但是,這似乎並沒有激發了標準裝載使用dlopen
,除了邊緣的例子:
- 有條件的裝載是不是真的很有趣,在內存佔用優化方面當共享庫已被其他程序使用:加載已使用的庫不會增加內存佔用量。
- 避免編譯器監督是不安全的,也是編寫錯誤的好方法......我們也忽略了潛在的編譯器優化。
那麼,有沒有其他的用途,其中dlopen
是首選的標準動態鏈接/加載?
認爲插件和類似的東西。 – Mat
模塊化和插件?作爲使用新功能動態擴展程序的一種方式。或者作爲在運行時檢測某些功能的方法,然後加載正確的庫來處理(遊戲或3D引擎的典型用例)。 –
@Someprogrammerdude這應該是答案。 – yugr