我构建了一个C ++库,用于在大多数已知平台上制作游戏,它可以正常工作。然而,我遇到了链接器的一个小问题,如果没有找到答案,我就无法忍受。
我在两个单独的文件中有两个单独的类:KinesisWorld
中的KinesisWorld.h
和ASEngine
中的ASEngine.h
。它们在实现方面都有类似的行为,它们封装了其他库提供的功能,KinesisWorld
继承并调用Box2D
函数和ASEngine
调用angelscript
函数。到目前为止一切都很好。
现在,当我构建一个使用我的库的应用程序时,只要我不包含或使用KinesisWorld
,链接器就不会尝试链接Box2D
库。只要我在最终的可执行文件源中的某处包含KinesisWorld.h
,它就会立即抱怨未定义的引用,直到我将Box2D
添加到链接器。这是我一直知道并在其他库中观察到的行为。
尽管如此,angelscript
根本没有包含ASEngine.h
,它总会抱怨对angelscript
的未定义引用,即使最终的可执行文件没有任何引用也是如此
有什么可以导致这种事情的想法?我在Linux 32位和Windows 32位上测试了它,分别使用GCC和Visual Studio,行为相同。
答案 0 :(得分:1)
在调用违规(声明但未定义)函数之前,链接器不关心。
在这种情况下,除了KinesisWorld之外,你没有在任何地方使用任何Box2D函数,但你在库中的某处使用了angelscript。仔细检查您的ASEngine外观,特别是在其他任何地方(使用整个项目中的“查找”功能可能有帮助)。