c++ von Windows auf Linux
-
Hallo Leute ich hab ein Problem beim compilieren einer c++ Datei unter Linux
Also ich einen kurzes c++ Programm unter Windows erstellt und compiliert, funktioniert einwandfrei.
Wollte nun den selben Code unter Linux compilieren lassen und bekomme eine Warnung:In file included from /usr/include/g++/backward/iostream.h:31, from main.cpp:18: /usr/include/g++/backward/backward_warning.h:32:2: Warnung: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
Meine Headerfiles sind:
#include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <stdio.h> #include <string>
Und bein Ausführen der Datei:
Speicherzugriffsfehler
Danke
-
Da wird wohl was falsch sein am Programm, was unter Windows es nicht abstürzen liess.
Zunächst sind deine Header falsch und kein C++. Richtiger wäre:
#include <iostream> #include <fstream> #include <cstdlib> #include <cstdio> #include <string>
Dem Speicherfehler kannst du auf die Schliche kommen, indem du das Programm im Debugmodus übersetzt und es im Debugger startest oder es mit valgrind versuchst.
-
Den Standard gibt es nun schon seit 6-7Jahren
http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4
-
Hab nun die Header geändert und musste nun alle Befehle mit using hizufügen, musste ich unter Windows nicht machen.
Den Speicherzugriffsfehler habe ich immer nach.
Wie geht debuggen im Linux.
Ich verwende g++.
-
MasterDitz schrieb:
Hab nun die Header geändert und musste nun alle Befehle mit using hizufügen, musste ich unter Windows nicht machen.
Den Speicherzugriffsfehler habe ich immer nach.
Wie geht debuggen im Linux.
Ich verwende g++.Du hast unter Windows keinen standardkonformen C++ Kompiler verwendet. Zum Debugmodus:
1. Kompiliere alle Sourcen mit -g also zum Beispiel: g++ -o prog -g source.cpp
2. Starte den Debugger: gdb ./prog
3. Starte das Programm im debugger: run <Argumente>
4. Wenn du den Absturz hast, gibt dir ein "where" den Stacktraceback.Das sollte für den Anfang reichen.
-
MasterDitz schrieb:
Hab nun die Header geändert und musste nun alle Befehle mit using hizufügen, musste ich unter Windows nicht machen.
Das liegt daran, dass du entweder einen veralteten Compiler unter Windows nutzt oder dein Compiler einfach diesen Fehlerhaften Code akzeptiert. Der ISO/ANSI C++ Standard erfordert diese neuen Header.
Den Speicherzugriffsfehler habe ich immer nach.
Wie geht debuggen im Linux.
Ich verwende g++.Wenn du nicht wie Ponto vorgeschlagen hat direkt mit dem GDB debuggen willst, gibt es zahlreiche Oberflächen für den GDB, wie
Insight oder
DDD.Die meisten IDEs (für eine Liste, schau mal in die FAQ) haben den GDB auch direkt integriert.
-
Also ich habe unter Windows mit Microsoft Visual c++ gearbeitet damit ich debugen kann.
Hab auch mit Borland C++ Compiler gearbeitet und beide haben den Code akzeptiert.gdb hat folgendes geschrieben:
Program received signal SIGSEGV, Segmentation fault.
0x40192af0 in strcpy () from /lib/i686/libc.so.6Kann man kdevelop gleich wie Microsoft Visual c++ verwenden, ich meine debuggen und so?
-
Gib mal bt ein, dann siehst du wo und wann die Funktion aufgerufen wurde. Wenn du weiter direkt mit dem GDB arbeiten willst, dann kannst du mit break <Funktion oder Code-Zeile> Breakpoints setzen und mit step Schrittweise durch das Programm laufen. Mit print <Variable oder Speicheradresse> kannst du dir Variablen anzeigen lassen.
Kann man kdevelop gleich wie Microsoft Visual c++ verwenden, ich meine debuggen und so?
gleich nicht, ähnlich!
Aber wie gesagt, Debuging und co sind schon alles integriert. Ist eben eine IDE.
-
So ich machs nun mit kdevelop, bekomm aber folgenden Error
Warnung: ISO C++ forbids variable-size array
-
Im debug modus von kdevelop kommt:
program received SIGSAGV, Segmentation fault
Wie meiß ich in welcher Zeile der Fehler ist?
-
MasterDitz schrieb:
Im debug modus von kdevelop kommt:
program received SIGSAGV, Segmentation fault
Wie meiß ich in welcher Zeile der Fehler ist?
im debugger starten. dann wird es gezeigt.