2016-03-29 7 views
-4

Ich arbeite an einem kleinen Projekt, um zu versuchen, den Code Source Engine 2013 unter der Qt Creator IDE arbeiten zu lassen. Mein ultimatives Ziel ist es, daraus ein CMake-Projekt zu machen, um Valves limitiertes VPC-System auszuwerfen, obwohl ich noch nicht genau weiß, wie das funktioniert, also mache ich einfache Schritte.Neudefinition von strdup Funktion Hat bereits einen Body

Ich bin es gewohnt, unter dem MSVC++ 2013 Compiler zu kompilieren, also das ist was ich benutze, und ich bin auf diese letzte Frage gestoßen, ich weiß nicht, wie ich damit umgehen soll. Was ich zuerst mache, wenn es nicht unter dem vorgesehenen Compiler kompiliert, mache ich es offensichtlich falsch, und ich sollte den Code noch nicht ändern müssen.

Valve hat diese memoverride.cpp, die ein char * __ cdecl _strdup (const char * string) hat. Wenn ich es auskommentiere, kompiliert der Code ganz gut, also ist dies das letzte Problem, mit dem ich es zu tun habe.

Aus dieser Funktion "Überschreibung" Ich erhalte die folgenden zwei Fehler:

C2084: Funktion ‚char MemAlloc_StrDup (const char) hat bereits einen Körper

C2732: Verknüpfung Spezifikation frühere Spezifikation widerspricht für 'MemAlloc_StrDup'

Kennt jemand eine notwendige Compiler-Option, einige Standard-Bibliothek, die ausgeschlossen werden sollte, oder eine Präprozessor-Definition, die ich verwenden sollte, um dies zu umgehen? Ich habe versucht, den Code in Visual Studio zu kompilieren, und das unterdrückte Startup-Banner deaktiviert, so dass ich alle Optionen sehen konnte, die es passierte, aber ich versuchte sie alle, aber es schien keinen Unterschied zu machen.

Also hat jemand eine Idee?

Alle Informationen würden sehr geschätzt werden, danke!

+1

TL, DR. * "memoverride.cpp" * Ist das C oder C++? –

+0

Es ist C++. Wenn Sie jedoch vorschlagen, dass ich den Code mit externem "C" oder etwas bearbeite, ist das nicht die Antwort, nach der ich suche. Und komm, es ist nicht so lang. –

+1

Ja ist es, das meiste ist nur Waffel. * "Ich bin es gewohnt, unter dem MSVC++ 2013 Compiler zu kompilieren, also verwende ich das hier" * –

Antwort

0

Das Problem, das Sie mit einer doppelten Definition von MemAlloc_StrDup/strdup haben, wird wahrscheinlich durch die Tatsache verursacht, dass Sie nicht zwei Definitionen von strdup haben können. Es gibt keine MSVC++ - Compileroption, die genau das löst.

Es kann auf anderen Compilern "arbeiten", weil die eine Definitionsregel nicht erfordert, dass der Compiler mit einer fatalen Fehlermeldung beendet wird, oder sogar eine Warnung gibt. Aber MSVC++ hat das Recht, dies abzulehnen.

MSVC++ ermöglicht es Ihnen, seine Standardbibliothek nicht zu verknüpfen. Dies wird Ihr Problem wahrscheinlich nicht lösen, da es eine Alles-oder-Nichts-Option ist.