2012-02-13 45 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相匹配,然後使用發行版進行發佈。

當庫鏈接器中的「繼承父項或項目默認值」複選框被重新激活時,其他問題已解決。 (雖然方向納入庫中,否則說