Linker 理解g++;当A引用B和B引用C,但未找到C时的链接器 我有一个C++程序P>/St>链接到一个动态库 d,它又链接到另一个动态库 z >

Linker 理解g++;当A引用B和B引用C,但未找到C时的链接器 我有一个C++程序P>/St>链接到一个动态库 d,它又链接到另一个动态库 z >,linker,ld,Linker,Ld,p是不是直接调用库的任何方法/var/类Z 我从源代码编译了D,一切都很顺利 当我试图编译p时,链接器抱怨在Z中找不到方法。我还将此链接修复为Z 然而,我希望,由于p不会直接从Z调用任何方法,链接器只会对D感到“高兴” 我的问题是: 这种特殊情况的可能原因是什么,即被迫链接到Z 我的解决方案是黑客还是好的解决方案 请注意,我希望对ld链接器的功能有更深入的了解 编辑:这个问题在Linux的上下文中。此处引用的动态库是共享对象。此行为与预期一样,您的解决方案是处理此问题的公认方法。谢谢,但为什

p不是直接调用库的任何方法/var/类Z

我从源代码编译了D,一切都很顺利

当我试图编译p时,链接器抱怨在Z中找不到方法。我还将此链接修复为Z

然而,我希望,由于p不会直接从Z调用任何方法,链接器只会对D感到“高兴”

我的问题是:

  • 这种特殊情况的可能原因是什么,即被迫链接到Z
  • 我的解决方案是黑客还是好的解决方案
请注意,我希望对ld链接器的功能有更深入的了解


编辑:这个问题在Linux的上下文中。此处引用的动态库是共享对象。

此行为与预期一样,您的解决方案是处理此问题的公认方法。谢谢,但为什么会发生这种情况?只有D还不够吗?我的意思是P在D中使用方法。D已经编译好了。查找Z应该是执行时间的问题,而不是链接时间的问题。很明显,我似乎错了,但我想知道为什么。什么样的“动态库”?(例如,Windows DLL的行为与Linux共享对象不同)Linux共享对象。我将编辑我的问题以反映这一点。这和C++有什么关系?