代码之家  ›  专栏  ›  技术社区  ›  DevilWithin

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

  •  0
  • DevilWithin  · 技术社区  · 13 年前

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

    我在两个不同的文件中有两个独立的类: KinesisWorld 在里面 KinesisWorld.h ASEngine 在里面 ASEngine.h 它们两者在实现方面具有相似的行为,它们封装了由其他库提供的功能, KinesisWorld运动世界 继承和调用 Box2D 功能和 A发动机 电话 angelscript 功能。到现在为止,一直都还不错。

    现在,当我构建一个使用我的库的应用程序时,只要我不包含或使用 KinesisWorld运动世界 ,链接器不会尝试链接 方框2D 图书馆只要我简单地包括 KinesisWorld.h 在最终可执行文件源的某个地方,它会立即抱怨未定义的引用,直到我添加 方框2D 到链接器。这是我在其他库中一直知道并观察到的行为。

    尽管如此 天使脚本 ,不包括 A发动机.h 总之,它总是抱怨对的未定义引用 天使脚本 ,即使最终的可执行文件没有对其进行任何引用。

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

    1 回复  |  直到 13 年前
        1
  •  1
  •   Casey    13 年前

    直到调用了有问题的(已声明但未定义的)函数,链接器才关心。

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