Ausführen des früher kompelierten Programms



  • Hallo zusammen.
    Ich bin ganz neu in Programmierung, deswegen stelle ich häufig ganz dumme Fragen, aber trotzdem:

    Mittels Putty greife ich auf einen entfernten Linux Rechner zu, dann kann ich die Quelldateien kompilieren und ausführen, aber beim Ausführen der schon direkt am Linux Rechner kompilierten Dateien bekomme ich eine Fehler-Meldung, und zwar: -"bash: ./Dateiname: Ungültiges Argument"
    Genauso geht es andersrum: Was ich quasi von Windows mittels Putty in der Linux Konsole kompiliere, kann ich das am Linux Rechner nicht ausführen_ also muss neu kompilieren..

    Wo liegt mein Fehler und wie lässt der irgendwie beheben?

    Danke für die Antwort im Voraus)
    P.S. Sorry für mögliche Fehler: bin nicht Deutsche.



  • Könnte es sein, daß du für eine falsche Plattform kompilierst, wie in What does “Invalid argument” mean in Solaris??
    Mit welchem Befehl kompilierst du denn?



  • g++ -Wall Quelldateiname -o Zieldateiname



  • Hast du dann auch die passenden Rechte für das Ausführen der Datei? Was sagt "ls -l" für die Zieldatei?



  • ja, ich habe alle Rechte, für beide Dateien (egal wo kompilierten):
    -rwxr-xr-x 1 mfortova student 10K Nov 6 10:29 Pr_QGleichung*



  • Was gibt

    file ./PR_QGleichung
    

    aus?
    Ist das wirklich "executable"?
    s.a. How to Determine the File Type of a File Using Linux oder check if a file is executable (ich hoffe, du kannst englisch?)

    Und welche Dateiendung hat deine Quelldatei (die du dem g++ übergibst)?
    Sollte bei g++ ja ".cc" oder ".cpp" haben (evtl. hat dieser einfach nur eine Objektdatei anstatt einer Anwendung erstellt).

    Edit: du kannst auch explizit mit der Option "-x" die Sprache angeben:

    g++ -x c++ source -o output
    

    s.a. g++ Options: Options Controlling the Kind of Output



  • Für die direkt am Linux Rechner kompil.Datei:

    Pr_QGleichung:  ELF 64-bit LSB executable AMD64 Version 1, dynamically linked, not stripped, no debugging information available
    

    Für die über Putty kompil.Datei:

    Pr_QGleichung1: ELF 32-bit MSB executable SPARC32PLUS Version 1, V8+ Required, dynamically linked, not stripped, no debugging information available
    

    P.S ich hab 64-bit Windows Version.

    Ja, die Quelldatei hat entsprechende Endung, und zwar heißt sie Pr_QGleichung.cpp

    Vllt muss es so sein, aber dann verstehe ich nicht wirklich, was Putty macht... Beim Ausführen bin ich ja dann nicht mehr im Linux-system, oder? 😕



  • SPARC32PLUS ??? das kann auch nicht laufen muss genau so AMD64 sein

    Ist definitiv falsch - über Putty wird der falsche Kompiler verwendet - moeglicherweise bei SSH umgebogen auf den falschen



  • Das hatte ich ja gleich schon in meinem ersten Beitrag vermutet. 😉

    Probiere dann mal "-march=native" als g++-Option: x86 Options

    Ansonsten auch mal "uname -a" über putty ausgeben lassen, s.a. How to check OS and version using a Linux command.



  • So ich das verstehe ist der Server ein Sparc System und der lokale Rechner ein x86-64 System. Die Executables laufen dann natürlich nur auf dem System, auf dem sie gebaut wurden, da es unterschiedliche Architekturen sind.

    Da würde nur Cross-Compiling helfen. Cross-Compiling ist allerdings nicht unbedingt trivial. Bei Sparc kenne ich mich da auch nicht aus.



  • Aber der lokale Rechner läuft doch unter Windows (oder warum sonst Putty?). Und unter Windows baut man auch nicht aus Versehen ELF Binaries. Oder hab ich da was missverstanden? Wieviele (und welche) Rechner sind jetzt beteiligt?


Log in to reply