在Windows中,許多.dll都帶有一個靜態的.lib副本。我的理解是,.lib對手基本上包含LoadProcAddress調用,因此程序員不必自己做。本質上,節省時間。當我切換到Linux時,我認爲情況是一樣的,以.so和.lib替換.d與.a替換爲.a,但我遇到了一種情況,顯示我這是錯誤的,我無法弄清楚什麼正在進行中:在編譯時鏈接到共享對象
我正在使用作爲.a/.so對出現的庫。我正在連接.a,但是當我在生成的二進制文件上執行ldd時,它不包含對應的.so文件的引用。那麼,我試着鏈接.so文件,令我驚訝的是,這工作。另外,當我對生成的二進制文件執行ldd時,.so文件出現了。
所以,我真的很困惑,到底發生了什麼。在Windows中,我絕不會想到與.dll文件鏈接。另外,在Windows中,如果一個.dll文件伴隨着一個.lib文件,並且我在編譯時與.lib鏈接,那麼我希望在運行時對相應的.dll具有依賴性。這兩種情況在這種情況下都是不正確的。
是的,我已經閱讀了關於Linux中共享對象的基本教程,但是我讀的所有內容似乎都表明我最初的假設是正確的。順便說一下,我應該提及我使用Code :: Blocks作爲IDE,但我知道它使事情變得複雜,但我確信當我告訴它與.so文件鏈接時,它不僅僅是交換.a文件,因爲生成的二進制文件較小。 (加上關於LDD的整個業務...)
無論如何,在此先感謝。
不,我很驚訝你可以鏈接一個動態庫。你不能在Windows中鏈接一個DLL。 – Joey 2018-03-10 22:28:47