2011-06-10 82 views
2

我來自一個Windows本地開發的視覺工作室背景,我現在要編譯用於android的本地代碼。靜態/動態庫vs .so庫?

我不確定unix類庫(.so?)是如何工作的。它們是靜態的(就像windows上的.lib)或動態加載像DLL一樣? 例如,在Visual Studio中,我將.lib文件添加到我的項目中進行編譯,然後在運行時加載.dll。通過使用GCC,unix-stuff中的等價物是什麼?

謝謝!

+0

它們是動態的(共享對象) - http://en.wikipedia.org/wiki/Library_(computing)#Naming。 – MByD 2011-06-10 16:02:59

+0

所以你不需要一個.lib等效的編譯在unix開發中,只需加載動態庫? – KaiserJohaan 2011-06-10 16:05:04

+0

查看Didier的答案 – MByD 2011-06-10 16:07:30

回答

3

在Linux上,.so文件與Windows上的.dll文件等效(*),因爲它們在執行時被動態加載到可執行文件。但請注意,鏈接應用程序時不需要.lib文件。鏈接器將直接在.so文件中找到信息。

*:有差異。

+0

有什麼區別(顯然格式除外)? – Mehrdad 2011-06-10 16:08:01

+0

我能想到的主要原因是Linux .so文件可能具有未定義的依賴關係。他們將在運行時解決。 (在Windows上,它們需要在鏈接時解決。) – 2011-06-10 16:11:46

+0

此外,Linux .so文件沒有DllEntry函數,該函數在動態庫由可執行文件加載/卸載時調用。 – 2011-06-10 16:12:51

0

。Linux上的Linux文件的行爲與Windows上的.dll和Mac OSX上的.dylib的行爲相同。