【问题标题】:Static/dynamic libraries vs .so libaries?静态/动态库与 .so 库?
【发布时间】:2011-09-12 15:11:12
【问题描述】:

我来自一个带有visual-studio背景的Windows,用于本机开发,现在我将编译本机代码以在Android上使用。

我不确定类 unix 库 (.so?) 是如何工作的。它们是静态的(如 Windows 上的 .lib)还是像 DLL 一样动态加载? 例如,在 Visual Studio 中,我将 .lib 文件添加到我的项目中进行编译,然后在运行时加载 .dll。 unix-stuff 中的等价物是什么,比如使用 GCC?

谢谢!

【问题讨论】:

标签: c visual-studio gcc dll


【解决方案1】:

在 Linux 上,.so 文件与 Windows 上的 .dll 文件等效 (*),因为它们在执行时动态加载到可执行文件中。但请注意,链接应用程序时不需要 .lib 文件。链接器将直接在 .so 文件中查找信息。

*:有区别。

【讨论】:

  • 我能想到的主要是Linux .so 文件可以有未定义的依赖关系。它们将在运行时解决。 (在 Windows 上,它们需要在链接时解决。)
  • 另外,Linux .so 文件没有在可执行文件加载/卸载动态库时调用的 DllEntry 函数。
  • 未定义是什么意思?你总是可以为不存在的东西创建一个假的lib文件,如果程序在启动时发现DLL就会运行......
【解决方案2】:

首先,您应该阅读Static, Shared Dynamic and Loadable Linux Libraries 上的页面。

这应该可以澄清您的几个问题。该页面包含非常适合初学者的源代码示例。

另一个有趣的参考是Writing DLLs for Linux apps

【讨论】:

    【解决方案3】:

    Linux 上的 .so 文件的行为方式与 Windows 上的 .dll 和 Mac OSX 上的 .dylib 相同。

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 2011-11-05
      • 2011-05-22
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多