tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
Like Tree3Danke
ERLEDIGT
JA
ANTWORTEN
25
ZUGRIFFE
1149
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Hallo Welt

    Nach langer Arbeit an einem grösseren Projekt, das ich mit VC++ EE geschrieben habe, möchte ich das ganze auch auf Unix-Systemen laufen lassen. Dazu habe ich mir mit Oracles VirtualBox eine Ubuntu 32bit Version installiert und wollte den Code aus VC++ direkt importieren. 3 Stunden später hat auch der gcc-Compiler den Code kompiliert (Mit Code::Blocks und MinGW). So weit so gut. Nur funktioniert das Programm nicht!

    Eines vorweg: Ich habe keinen Windows-spezifischen Code mehr drin (auf jeden Fall meckert der Compiler nicht). Gut, sagte ich, probieren wir das ganze mit MinGW auf Windows (Mit Dev-Cpp).
    Und siehe da:
    Unterschied der Dateigrösse:
    - Ubuntu: 116kb
    - Windows: 404kb
    Ich habe zuvor sämtliche Optimierungen seitens gcc untersagt.

    Was mache ich falsch (mal von einem hässlichen Programmierstil abgesehen)?

    Gruss
    cwriter
    Angehängte Dateien Angehängte Dateien
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    "Funktioniert nicht" ist keine Fehlerbeschreibung.
    Was passiert?
    Was findet man mit dem Debugger heraus?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Debugger: Keine Fehler
    Fehler: Keine Ausgabe. Es wird nur 0x0 zurückgegeben, was der return am Ende ist. Dazwischen sollten Dateien geöffnet und geschlossen werden, doch die Eingabe (über scanf() sowie über argv[]) wird nicht gefressen und mit dem Debugger von Code::Blocks komme ich nicht richtig klar. Dennoch: Das Programm funktioniert mit den std-libraries ja auf Windows, deshalb zweifle ich an einem Fehler des Codes. Ich lade mal die Files hoch. Die sollten im selben Verzeichnis des Programms liegen.

    Gruss
    cwriter
    Angehängte Dateien Angehängte Dateien
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  4. #4
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Ok, wenn ich das ganze mit dem Terminal versuche, gibt's den Error, dass #incldue <string> nicht gefunden wurde. Ich dachte, der gcc steht für g++ -> c++ ?

    Gruss
    cwriter
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Also, incldue wird sicher nicht gefunden

    Und gcc steht nicht für g++. Wer sagt sowas?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #6
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Hi,
    Ich habe kurz einen flüchtigen Blick in deinen Code geworfen. Aber in der main hast du keine <string> includiert. Diese ist etwas anderes als die <string.h>

    Vermutlich compilierte dein Code auch nur, weil die durch die Functions.cpp inkludiert wurde, die du gerade auskommentiert hast.

    Grüße
    Geändert von Jennesta (26.01.12 um 22:56 Uhr)
     
    Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.

  7. #7
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Wer sagt sowas?
    Ein Windows-verwöhnter Programmierer, der neu in Linux einsteigt. Ich.
    @Jennesta
    Wird ja immer besser. Die Functions.cpp habe ich aber nur unter Windows direkt eingebunden, da darf man sowas
    Gut, #include <string> hinzugefügt. Keine Merkbaren Veränderungen, Dateigrösse bleibt gleich.
    Was nun?

    /EDIT: Langsam glaube ich, dass Linux mich fertig machen will:
    Code :
    1
    
    g++ Erkennung.cpp Functions.h -w
    liefert keinen Fehler und die generierte a.out ist 119kb gross gegenüber den 85kb release bzw. 116kb Debug von Code::Blocks. Dennoch will das Programm nicht funktionieren.


    Gruss
    cwriter
    Geändert von cwriter (27.01.12 um 06:31 Uhr)
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Abgesehen davon, dass es natürlich sinnfrei ist in einer Headerdatei die Implementierung gleich als erstes einzubinden und eine Headerdatei zu kompilieren (welche sowieso schon in Erkennung.cpp eingebunden wird)....

    Vielleicht solltest du auch die unzähligen Warnungen nicht einfach ignorieren und den Code berichtigen?

    Ansonsten, kompiliere den Code mit Debugginginformationen und führe dein Programm unter gdb aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    > g++ -g Erkennung.cpp
    > gdb a.out
    ...
    gdb> break 1009 # Abbruchpunkt setzen
    gdb> run
    ...
    gdb> p Eingabe # Wert einer Variablen drucken
    ...
    gdb> next # Schrittweise weiter, Funktionsaufrufe überspringen.
    gdb> continue # Programm weiter ausführen bis zum Ende oder Abbruchpunkt oder Signal
    Gruß

    PS: Die mit MinGW kompilierte .exe Datei mit Debugginginformationen ist bei mir 190kB groß, ohne Dbg-Symbole 115kB.

    Wie rufst du denn das Programm auf?
    Geändert von deepthroat (27.01.12 um 07:51 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Die meisten Warnungen beziehen sich auf "NULL used in Arithmetic", und ich will nicht meine Zeit damit verbringen, durch diese (etwa 100) Warnungen zu scrollen oder die Konsole vollzuspammen.
    Das mit gdb werde ich versuchen, sobald ich wieder ein System zur Verfügung habe.

    cwriter
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von cwriter Beitrag anzeigen
    Die meisten Warnungen beziehen sich auf "NULL used in Arithmetic", und ich will nicht meine Zeit damit verbringen, durch diese (etwa 100) Warnungen zu scrollen oder die Konsole vollzuspammen.
    Genau deswegen solltest du den Code einfach berichtigen. Dann gibt's auch keine Warnungen.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #11
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Und wie? Ich sehe darin keinen Fehler.

    cwriter
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  12. #12
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von cwriter Beitrag anzeigen
    Und wie? Ich sehe darin keinen Fehler.
    strcmp gibt einen int zurück.

    NULL wiederum ist ein void*, also ein Zeiger.

    Passt ja irgendwie nicht zusammen. Komisch, oder?
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  13. #13
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Und es steht irgendwo, dass 0 NULL ist.

    cwriter
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

  14. #14
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von cwriter Beitrag anzeigen
    Und es steht irgendwo, dass 0 NULL ist.
    In dieser Aussage steckt soviel Unwissen drin. Ich weiß gar nicht wo ich anfangen soll...

    C / C++ sind typisierte Sprachen - aus gutem Grund.

    NULL ist ((void*)0).

    Das ist etwas ganz anderes als int 0.

    Mal abgesehen davon, das du überhaupt nicht weißt wie ein Nullzeiger im Speicher repräsentiert wird.

    Lassen wir das.

    ---

    Ich werde es wohl nicht mehr nachvollziehen können wie man so dreist sein kann, einfach alle Warnungen zu ignorieren, zu behaupten das Programm wäre fehlerfrei und trotzdem funktioniert irgendwas nicht...

    Bei dieser Menge an Warnungen - oder wenn man einfach alle Warnungen ausstellt - sieht man natürlich auch nicht die eine schwerwiegende Warnung, die darin versteckt ist...

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  15. #15
    cwriter cwriter ist offline Mitglied Gold
    Registriert seit
    Mar 2010
    Beiträge
    242
    Gut. Ich habe unter Windows mit Visual C++ Projekte mit strcmp("","") == NULL kompiliert. Unter Windows mit MinGW. Mit allem möglichen. Die Warnungen sind nie ernst zu nehmend gewesen. Alles funktioniert. Nur unter Linux geht das nicht. Das lässt durchaus den Schluss zu, dass der Code an sich nicht unbedingt fehlerfrei, wohl aber funktionsfähig ist. Meine Frage ist: Weshalb geht das unter Linux nicht?
    Ich werde mal die NULLs durch 0s ersetzen, sobald ich wieder beim Computer bin.

    cwriter
    Geändert von cwriter (27.01.12 um 17:40 Uhr)
     
    Intel inside - Idiot outside :-)

    Ich schreibe in C und bin Anfänger.
    ______________________________

    Falls ich eines Tages einen guten Beitrag schreiben werde, bitte bewerten und/oder Danke sagen.
    Danke

Ähnliche Themen

  1. C datei kompilieren - ubuntu 10.10 VMware Player
    Von weezyFbaby im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 20.01.11, 15:31
  2. Latex kompilieren unter Linux
    Von Darian im Forum Sonstige Sprachen
    Antworten: 6
    Letzter Beitrag: 12.12.07, 10:47
  3. GtkGlAreaSharp kompilieren unter MS
    Von Meldur im Forum .NET Grafik und Sound
    Antworten: 3
    Letzter Beitrag: 01.11.06, 13:57
  4. Antworten: 10
    Letzter Beitrag: 14.07.04, 21:25