UNIX:将可执行库链接到静态库和动态库?

UNIX:将可执行库链接到静态库和动态库?,unix,compiler-construction,linker,libraries,Unix,Compiler Construction,Linker,Libraries,我承认这是一个家庭作业问题,问这是否可能。我相信答案是肯定的,但我不知道“为什么”这个问题的答案。对我来说,答案似乎只是‘为什么不?’。。。有谁能提供一些更深入的见解来解释为什么这是真的(或者不真实,如果我错了)?这个问题似乎只有在有棘手的部分时才会被问到,但从我对编译的理解来看,似乎没有任何东西不允许链接到这两个库。是的,当然可以链接静态库和动态库。链接到静态库本质上与从归档中获取所需的对象文件并将其包含在链接过程中相同 如果要链接的静态库和动态库针对同一个库,则动态链接是冗余的。仍然允许这样

我承认这是一个家庭作业问题,问这是否可能。我相信答案是肯定的,但我不知道“为什么”这个问题的答案。对我来说,答案似乎只是‘为什么不?’。。。有谁能提供一些更深入的见解来解释为什么这是真的(或者不真实,如果我错了)?这个问题似乎只有在有棘手的部分时才会被问到,但从我对编译的理解来看,似乎没有任何东西不允许链接到这两个库。

是的,当然可以链接静态库和动态库。链接到静态库本质上与从归档中获取所需的对象文件并将其包含在链接过程中相同


如果要链接的静态库和动态库针对同一个库,则动态链接是冗余的。仍然允许这样做,但这是毫无意义的(并且只是为可执行文件引入了不必要的运行时依赖项,至少在Unix上是这样)。

一般来说,没有理由不能链接到静态库和动态库,尤其是在它们不冲突的情况下(例如,提供相同的符号)。这样做的机制会因编译器的不同而有所不同,但许多自由软件项目实际上都是这样做的——它们静态地构建了一个所谓的“便利库”,然后链接到一个动态链接的可执行文件中。

您将如何做?你试过了吗?它起作用了吗?;-)祝你好运我想这就是为什么我很难回答“为什么”这个问题。这似乎只是因为你没有理由不这样做。@Logan我能想到的最好答案是,从链接器的角度来看,链接器命令行上的一系列对象(a.o b.o c.o)和包含它们的静态库(libfoo.a)实际上没有什么区别。在第一种情况下,很明显,您也可以链接到共享库,因此,由于第二种情况几乎相同,您也可以链接到共享库。在某些*NIX上,像FreeBSD和Linux这样只有一个链接器符号空间,实际上可能无法链接相同的静态库和共享库。