所以我正在尝试构建一个小型 3D 引擎作为 VC++ 8.0 的练习。我有一个 MathLib 静态库和一个由我的 TestBed exe 链接的 Render 静态库。现在 Render 有两个类:Color 和 DXManager3D。颜色包括我来自 MathLib 的 Vector.h 很好,没有问题。
第二次我尝试在 DXManager3D 中包含 Vector.h,它让我大吃一惊,说符号被定义了两次,第二个定义被忽略(来自 lib 的警告)。我认为可能包括它两次会导致此问题,因此作为测试,我从 Color.h 中删除了 Vector.h 并将其留在 DXManager3D.h 中 - 同样的问题。我进行了三次检查,以确保我将所有东西都包裹在 ifndef 中以防止这种情况发生,所以我只能摸不着头脑。
DXManager3D.obj : 警告 LNK4006: "public: __thiscall Math::Vector::Vector(void)" (??0Vector@Math@@QAE@XZ) 已在 Render.obj 中定义;第二个定义被忽略
真正让我困惑的是,当我将 Render.lib 与 TestBed 分开构建时,它不应该链接任何东西,因为它是一个静态库,对吧?我仍然收到多个符号定义警告。如果我在 main 中实例化 DXManager3D,我的警告就会变成错误。
Render.lib(DXManager3D.obj) : error LNK2005: "public: __thiscall Math::Vector::Vector(void)" (??0Vector@Math@@QAE@XZ) 已经在 WinMain.obj 中定义
是的,我有 F1 的 LNK4006 和 LNK2005,而 MSDN 中的解决方案对我不起作用。抱歉,如果之前有人问过这个问题,我找不到任何可靠的东西来帮助我使用搜索功能。
谢谢!