当相同的库动态地和静态地链接到c ++程序时会发生什么?

时间:2015-12-05 12:40:17

标签: c++ compilation linker

我遇到了静态链接库和共享库的代码,两者都包含相同的函数名。链接器如何决定链接哪个库。 我在此路径/etc/ld.so.conf中添加foobar.so库可执行路径以及-I /(包含文件路径)-l(可执行文件名)-L(库可执行文件路径) 之后我执行了ldconfig。我正在使用gcc comipler version gcc(GCC)4.4.7

1 个答案:

答案 0 :(得分:1)

这实际上取决于您使用的运行时环境,以及在该环境中如何实现“共享”或“动态”库。

有一种方法,每个动态库与静态链接的“存根”库结合在一起,因此编译器会根据存根方法解析您的调用,并且存根方法会在加载库后转发到动态加载的库。这肯定不适用于您的情况,因为每个存根方法都会与静态链接的方法冲突。

另一种方法是加载动态库为您提供该库的句柄,然后您可以在系统中查询该句柄上的入口点,并动态调用这些入口点。在这种情况下,链接器根本不涉及动态入口点的分辨率,因此没有任何问题(除了它没有意义)有一个提供等效入口点的静态链接库。