windows - integrering af bibliotek forårsager fejl C ++

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder i et VC ++ 2010-vinduesprojekt, der inkorporerer DirectX SDK (juni 2010), og et andet team genererede et fysikbibliotek til at indarbejde i programmet. Når jeg går igennem og udfører alle nødvendige opkald til biblioteket og alle. og jeg fulgte de anvisninger, de gav for at integrere biblioteket:


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


i C/C ++> generel> Yderligere Inkluder mapper sted


c:physics\_core        // without additional additional dependencies 


derefter i Linker> Input> Yderligere afhængigheder sted


C:physics\_corePhysicsCoreReleasePhysicsCore.lib    // without additional additional dependencies 


Indsæt derefter administrationsprogrammet, og anvend navngivningsrummet, hvor metoderne og objekterne skal kaldes (intellisens selv forsøger at foreslå, at automatisk udfyldes korrekt). men så kaster min kompilator følgende liste. Jeg er temmelig sikker på, at de første 6 har at gøre med biblioteket selv, og de andre har at gøre med 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...EngineDebug	est.exe : fatal error LNK1120: 15 unresolved externals


det er, når jeg ruller programmet tilbage til, før jeg integrerer Fysikbiblioteket, fungerer alt som det skal. de mennesker, der oprettede biblioteket, fortæller mig, at det fungerer fint på alle de systemer, de forsøgte at bruge den på, men de forsøgte aldrig at bruge det i et Windows-program, og de forsikrer mig om, at det ikke er noget at gøre med det være en Windows applikation. da jeg spurgte, om de brugte nogen specielle flag som de første linker advarselstater, sagde de, at de ikke brugte et sådant flag (førende programmør vidste ikke selv hvad de var, eller hvordan man satte dem) .bygningen før integrering af fysik havde directX arbejder fint selv rendering.


enhver hjælp ville være fantastisk.


Opdatering: Ændret Linker> Indgang> Yderligere afhængigheder til


C: \ physics\_core \ PhysicsCore \ Debug \ PhysicsCore.lib
kan blive nødt til at ændre denne under frigivelse til at være originalen


der fastsatte de første 6 fejl, men de uopløste eksternaler eksisterer stadig


Opdatering:
situation løst.


alle fejl blev løst ved at tage 2 handlinger vedrørende samme egenskaber linje.


1 sikring af, at der blev brugt en fejlsøgning i biblioteket under debug-tilstand.


2 Kontroller afhængigheden af ​​det pågældende bibliotek, og inkludere dem, hvis der er nogen overlapning. da kompilatoren først kontrollerer afhængighedslisten over eventuelle biblioteker, der bruges, og kontrollerer derefter projektets afhængigheder. hvis der er nogen overlapning, står den første, og alle dem der efter bliver ignoreret, men hvis flagskabet med afhængighed ikke er sat til sandt, vil kompilatoren ikke indeholde dem.
så den korrigerede linje for at løse situationen var i Linker> Input> Yderligere afhængigheder, der skulle ændres til:


C:physics\_corePhysicsCoreDebugPhysicsCore.lib    // include additional dependencies


igen tak for al din hjælp.

Bedste reference


måtte ændre en af ​​egenskabslinjerne for at fjerne alle fejl.
Første ændring var, at biblioteket for .lib skulle afhjælpes for at matche det for Debug med Debug, og frigive med frigivelse.


De øvrige problemer blev løst, når afkrydsningsfeltet 'Arve fra forælder eller projektstandard' i bibliotekets Linker blev genaktiveret. (selvom retningen til at inkorporere biblioteket sagde ellers.