2011-09-16 52 views
1

我承认这是一个家庭作业问题,询问这是否可能。我相信答案是肯定的,但我不知道“为什么?”这个问题的答案。对我来说,似乎答案只是'为什么不是'?......任何人都可以提供一些更深入的见解,说明为什么这是真实的(或者如果我错了,那么是不真实的)?看起来这个问题只会被问到是否有一个棘手的部分,但从我所了解的编译来看,似乎没有任何东西会禁止链接到两者。UNIX:将可执行文件链接到静态库和动态库?

+0

你会怎么做?你试过了吗?它有用吗? ;-) 祝你好运! – shellter

回答

1

是的,当然你可以链接一个静态库和一个动态库。链接到一个静态库基本上与从档案中获取所需的对象文件并将它们包括在链接过程中相同。

如果您要链接的静态库和动态库是针对库,则动态链接是冗余的。它仍然被允许完成,但它是没有意义的(并且只是为可执行文件引入了不必要的运行时依赖项,至少在Unix上)。

+1

在一些像FreeBSD和Linux这样的链接器符号空间的* nixes上,实际上可能不可能链接相同的静态库和共享库。 –

1

通常,应该没有理由不能链接到静态和动态库,特别是如果它们不冲突(例如,提供相同的符号)。这样做的机制会因编译器而异,但许多免费软件项目实际上都是这样做的 - 他们静态构建所谓的“便利库”,然后将其链接到动态链接的可执行文件中。

+0

我想这就是为什么我无法回答“为什么?”的问题。看起来好像只是因为没有理由你不能。 –

+0

@Logan我能想到的最好的答案是链接器命令行上的一系列对象(ao bo co)和包含它们的静态库(链接器的视图)之间几乎没有区别(libfoo.a )。在第一种情况下,显然您也可以链接到共享库,因此,由于第二种情况几乎相同,因此您可以将其与共享库链接起来。 –

相关问题