2011-06-10 85 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的行为相同。