2016-03-31 11 views
2

Hier ist die Frage:
Ich schrieb ein Stück Code auf Windows. Bei Verwendung der Option /MT ist die Antwort falsch. Wenn Sie einfach zu /MTd wechseln, ist die Antwort richtig.
Jetzt bin ich verpflanzen portieren diesen Code zu Linux. Die Antwort ist falsch mit dem folgenden Befehl: g++ -Ofast -o test test.cpp. Ich bin mir auch ziemlich sicher, dass dies das einzige Problem ist, das übrig geblieben ist.
Ich habe libc6, libc6-dbg, libc6-dev, libstdc++-4.8-dev, libstdc++6 und libstdc++6-4.8-dbg installiert.
Was ist das Problem in dieser Situation und wie kann ich es lösen?Was ist die entsprechende Bibliothek in Linux als/MTd in Visual Studio?

Aktualisierung: Problem gelöst. Codes können unter Windows (Debug- und Release-Modus) und Linux korrekt mit verschiedenen Optimierungsoptionen ausgeführt werden. Es gab variable Initialisierungsprobleme. Danke an alle.

+1

Dies ist das erste Mal, dass ich 'porting' genannt' transplanting' sehe. netter Job auf überraschende mich :) – Shark

+0

Wenn Sie eine Debug-Version Ihres Programms erstellen möchten, fügen Sie das '-g' Flag beim Erstellen mit' gcc' oder 'g ++' hinzu. Das ist alles. –

+0

@JoachimPileborg, dies ist jedoch nicht die Essenz der Frage. – SergeyA

Antwort

1

Sie müssen Ihren Code reparieren. Das Programm verhält sich anders mit der Debug- und Release-Version der C++ - Laufzeitbibliothek (dies wird von/MT und/MTd gesteuert) bedeutet, dass Sie einen Fehler in Ihr Programm haben. Sehr wahrscheinlich undefiniertes Verhalten.

Die erste Sache wäre, ändern Sie Ihren Kompilierbefehl zu g++ -O3 -Werror -Wall -Wextra -pedantic -o test test.cpp und studieren Sie Compiler-Ausgabe. Wenn Sie Glück haben, werden einige Warnungen als Fehler angezeigt.

0

Sie haben zwei Probleme.

  1. Ihr g ++ Kompilierbefehl ist Freigabemodus. Verwenden Sie die Option -g, um mit Debug-Symbolen zu kompilieren.

  2. Sie müssen unter Windows beheben, warum Sie im Freigabemodus mit /MT keine korrekten Informationen erhalten.