0

我构建了一个 C++ 库,用于在大多数已知平台上制作游戏,它运行良好。但是,我遇到了链接器的一个小问题,如果不弄清楚答案,我就无法忍受自己。

我在两个单独的文件中有两个单独的类:KinesisWorldinKinesisWorld.hASEnginein ASEngine.h。两者在实现上有着相似的行为,它们封装了其他库提供的功能,KinesisWorld继承和调用Box2D函数和ASEngine调用angelscript函数。到现在为止还挺好。

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

虽然,使用angelscript, 根本不包括ASEngine.h,它总是会抱怨对 的未定义引用angelscript,即使最终的可执行文件没有对它进行任何引用。

知道什么会导致这样的事情吗?我分别使用 GCC 和 Visual Studio 在 Linux 32 位和 Windows 32 位上对其进行了测试,行为相同。

4

1 回答 1

1

在调用有问题的(已声明但未定义的)函数之前,链接器并不关心。

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

于 2013-03-31T16:00:29.320 回答