2012-02-13 46 views
0

我正在合并DirectX SDK(2010年6月)的VC++ 2010 Windows项目中工作,另一个团队生成了一个物理库以合并到程序中。当我经历和执行所有必要的电话到图书馆,和所有。我也跟着他们给了图书馆整合方向:集成库导致错误C++

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

C/C++>常规>附加包含目录的地方

c:\physics_core  // without additional additional dependencies 
在链接器>输入>附加依赖地方

然后

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

然后包括管理器,并使用提供的名称空间,无论方法和对象需要被调用(intellisence甚至尝试建议自动完成正确)。但是然后我的编译器会抛出以下列表。我非常确定,前6个与图书馆本身有关,而其他的则与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 [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol __imp__PostQuitMessage[email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
1>MainCore.obj : error LNK2001: unresolved external symbol [email protected] 
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检查有问题的库的依赖关系,如果有任何重叠,则包括它们。因为编译器首先检查正在使用的任何库的依赖项列表,然后检查项目的依赖关系。如果有任何重叠,第一个将会被忽略,但是如果包含依赖项标志没有被设置为true,编译器将不会包含它们。 所以修正行来解决的情况是在连接>输入>需要更多的依赖项改为:

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

再次感谢您的所有帮助。

+1

不要忽略这一点:*警告LNK4098:defaultlib“MSVCRT”与其他使用林达冲突;使用/ NODEFAULTLIB:库*冲突的运行时库会导致各种问题,虽然你会*通常*看到库函数的重新定义 – 2012-02-13 20:23:11

+1

@EdS。但我该如何解决它们,这是件大事情,所有这些调用都在回滚版本中,并且它正在发生什么。 – gardian06 2012-02-13 20:29:29

+1

Are you试图链接'PhysicsCore.lib'的* Release *版本和程序的* Debug *版本? – Praetorian 2012-02-13 20:37:17

回答

1

必须修改其中一个属性行才能清除所有错误。 首先改变的是那个目录。必须纠正lib,以便与构建Debug with Debug相匹配,然后使用发行版进行发布。

当库链接器中的“继承父项或项目默认值”复选框被重新激活时,其他问题已解决。 (虽然方向纳入库中,否则说