在这种情况下,C ++链接如何工作?

时间:2013-03-31 15:50:22

标签: c++ linker libraries

我构建了一个C ++库,用于在大多数已知平台上制作游戏,它可以正常工作。然而,我遇到了链接器的一个小问题,如果没有找到答案,我就无法忍受。

我在两个单独的文件中有两个单独的类:KinesisWorld中的KinesisWorld.hASEngine中的ASEngine.h。它们在实现方面都有类似的行为,它们封装了其他库提供的功能,KinesisWorld继承并调用Box2D函数和ASEngine调用angelscript函数。到目前为止一切都很好。

现在,当我构建一个使用我的库的应用程序时,只要我不包含或使用KinesisWorld,链接器就不会尝试链接Box2D库。只要我在最终的可执行文件源中的某处包含KinesisWorld.h,它就会立即抱怨未定义的引用,直到我将Box2D添加到链接器。这是我一直知道并在其他库中观察到的行为。

尽管如此,angelscript根本没有包含ASEngine.h,它总会抱怨对angelscript的未定义引用,即使最终的可执行文件没有任何引用也是如此

有什么可以导致这种事情的想法?我在Linux 32位和Windows 32位上测试了它,分别使用GCC和Visual Studio,行为相同。

1 个答案:

答案 0 :(得分:1)

在调用违规(声明但未定义)函数之前,链接器不关心。

在这种情况下,除了KinesisWorld之外,你没有在任何地方使用任何Box2D函数,但你在库中的某处使用了angelscript。仔细检查您的ASEngine外观,特别是在其他任何地方(使用整个项目中的“查找”功能可能有帮助)。