集成库导致错误C ++

时间:2012-02-13 20:21:00

标签: c++ windows directx static-libraries

我正在使用包含DirectX SDK的VC ++ 2010 Windows项目(2010年6月),另一个团队生成了一个物理库,以便合并到程序中。当我通过并执行所有必需的调用库,以及所有。我按照他们给图书馆整合的指示:

extract the director containing the .h files into my c:\

in C / C ++> general> Additional Include Directories place

c:\physics_core        // without additional additional dependencies 

然后在链接器>输入>附加依赖关系位置

C:\physics_core\PhysicsCore\Release\PhysicsCore.lib    // without additional additional dependencies 

然后包含管理器,并使用在方法和对象需要调用的任何地方提供的命名空间(intellisence甚至尝试建议自动正确完成)。但后来我的编译器抛出以下列表。我很确定前六个与图书馆本身有关,其他的则与directX有关。

1>  PhysicsCore.lib(PhysicsMgr.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
1>LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/LTCG' specification
1>PhysicsCore.lib(PhysicsMgr.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in MainCore.obj
1>PhysicsCore.lib(Box3D.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in MainCore.obj
1>PhysicsCore.lib(Circle3D.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in MainCore.obj
1>PhysicsCore.lib(Box2D.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in MainCore.obj
1>PhysicsCore.lib(Circle2D.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in MainCore.obj
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__UpdateWindow@4
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__ShowWindow@8
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__CreateWindowExW@48
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__RegisterClassExW@4
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__LoadCursorW@8
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__DefWindowProcW@16
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__PostQuitMessage@4
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__InvalidateRect@12
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__AddFontResourceExW@12
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__GetWindowRect@8
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__DispatchMessageW@4
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__TranslateMessage@4
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__PeekMessageW@20
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__UnregisterClassW@8
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__RemoveFontResourceExW@12
1>C:\general\...\Engine\Debug\test.exe : fatal error LNK1120: 15 unresolved externals
事实上,当我将程序推回到我整合物理库之前,一切都像它应该的那样工作。创建库的人告诉我它在他们试图使用它的所有系统上都能正常工作,但他们从未尝试在windows程序中使用它,并且他们向我保证它与它没有任何关系是一个Windows应用程序。当我问他们是否使用任何特殊标志,如第一个链接器警告状态时,他们说他们没有使用这样的标志(主程序员甚至不知道它们是什么,或者如何设置它们)。在集成物理之前的构建使directX工作得很好甚至渲染。

任何帮助都会很棒。

更新:将链接器>输入>附加依赖项更改为

C:\ physics_core \ PhysicsCore \调试\ PhysicsCore.lib 可能需要在发布时将其更改为原始

修复了前6个错误,但未解决的外部仍然存在

更新: 情况解决了。

通过对相同的属性行采取2个动作来解决所有错误。

1确保在调试模式期间正在使用库的调试版本。

2检查相关库的依赖关系,如果有任何重叠则包括它们。因为编译器首先检查正在使用的任何库的依赖项列表,然后检查项目的依赖项。如果有任何重叠,则第一个重叠,并且之后的所有重写都将被忽略,但如果include dependencies标志未设置为true,则编译器将不包含它们。 所以纠正线的情况是在Linker>输入>附加依赖关系需要更改为:

C:\physics_core\PhysicsCore\Debug\PhysicsCore.lib    // include additional dependencies

再次感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

必须修改其中一个属性行才能清除所有错误。 第一个改变是必须纠正.lib的目录以匹配构建Debug与Debug的目录,并在发布时释放。

当重新激活库链接器中的“从父级或项目默认继承”复选框时,解决了其他问题。 (尽管合并图书馆的方向另有说法。