我构建了一个 C++ 库,用于在大多数已知平台上制作游戏,它运行良好。但是,我遇到了链接器的一个小问题,如果不弄清楚答案,我就无法忍受自己。
我在两个单独的文件中有两个单独的类:KinesisWorld
inKinesisWorld.h
和ASEngine
in ASEngine.h
。两者在实现上有着相似的行为,它们封装了其他库提供的功能,KinesisWorld
继承和调用Box2D
函数和ASEngine
调用angelscript
函数。到现在为止还挺好。
现在,当我构建一个使用我的库的应用程序时,只要我不包含或使用KinesisWorld
,链接器就不会尝试链接Box2D
库。只要我简单地KinesisWorld.h
在最终可执行源中包含某个位置,它就会立即抱怨未定义的引用,直到我添加Box2D
到链接器。这也是我一直都知道并在其他库中观察到的行为。
虽然,使用angelscript
, 根本不包括ASEngine.h
,它总是会抱怨对 的未定义引用angelscript
,即使最终的可执行文件没有对它进行任何引用。
知道什么会导致这样的事情吗?我分别使用 GCC 和 Visual Studio 在 Linux 32 位和 Windows 32 位上对其进行了测试,行为相同。