库中的可执行依赖项

时间:2010-06-23 18:47:15

标签: c++ dynamic-linking static-linking

共享可执行文件时,我真的需要担心用于生成可执行文件的库吗?似乎应该在生成exe时考虑到这一点,而不是在必须运行它时。只是好奇。我很确定我不必担心,但想问这个问题以确保。更安全而不是抱歉。

1 个答案:

答案 0 :(得分:3)

这是静态和动态链接之间的区别。通过静态链接,正如您所推测的那样,库代码的相关部分直接包含(复制)到您的二进制文件中。通过动态链接,存在运行时依赖性;您的二进制文件将使用依赖于操作系统的技术来访问(依赖于操作系统的)共享库中的代码,例如Win32上的DLL或Linux上的SO。

如果您不确定您的程序是使用静态链接还是动态链接编译,请参阅编译器文档。此外,还有一些工具可以检查“导入表”或等效项的二进制文件的标题,并确定它们所依赖的共享库(如果有的话)。为此,我使用GNU objdump-x选项,在Linux和Windows下。