anfänger: Signalton bei cygwin ausschalten

Hallo zusammen,

ich habe mir cygwin installiert, da ich die bash sehr gerne mag
und mir damit das perlprogrammieren leichter fällt;
aber wie kann ich den signalton ausschalten (z.b. beim tabtab
drücken oder im vi)??

vielen dank

gruss

  1. Hallo,

    ich habe mir cygwin installiert, da ich die bash sehr gerne mag
    und mir damit das perlprogrammieren leichter fällt;
    aber wie kann ich den signalton ausschalten (z.b. beim tabtab
    drücken oder im vi)??

    Ich weiß nicht, ob es eine globale instellung gibt (naja, eventuell über die termcap)

    für die bash kannst Du
    set bell-style none
    bzw
    set bell-style visual

    in der .inputrc Deines home-Verzeichnisses einfügen.

    und für vim kannst Du
    set visualbell
    in die Datei .vimrc home-Verzeichnisses  schreiben.

    Damit hättest Du zumindest für die angesprochenen Fälle eien Lösung.

    Grüße
      Klaus

    PS: achja, less kriegst Du zum schweigen in dem Du die Umgebungsvariable LESS auf '-Q' stellst.

    1. Hallo,

      ich habe mir cygwin installiert, da ich die bash sehr gerne mag
      und mir damit das perlprogrammieren leichter fällt;
      aber wie kann ich den signalton ausschalten (z.b. beim tabtab
      drücken oder im vi)??

      Ich weiß nicht, ob es eine globale instellung gibt (naja, eventuell über die termcap)

      für die bash kannst Du
      set bell-style none
      bzw
      set bell-style visual

      in der .inputrc Deines home-Verzeichnisses einfügen.

      und für vim kannst Du
      set visualbell
      in die Datei .vimrc home-Verzeichnisses  schreiben.

      Damit hättest Du zumindest für die angesprochenen Fälle eien Lösung.

      SUUUUUPER... dieses gepiepse nervt mich jetzt nicht mehr!!!!!!!!!

      danke schön
      :)

  2. Hallo!

    Leider past nicht mehr in den Titel,und eigentlich hat es nichts mit dem Ursprungspostuing zu tun, aber naja.

    Ich habe mich denn doch mal ein wenig an c++ versucht, daes hierzu an meiner UNi eine c++ Einführung gab, dei ich leider verpasst habe, aber dei Infos stehen alle im Netz. Zu dieem Zweck habe ich cygwin installiert, so wie in http://www.plt.rwth-aachen.de/ov/cygwin.html erklährt. In der bash-shell laufen demnach auch ein paar einfache Programme, aber wie schaffe ich es jetzt das so ein c++ Programm auch in der normalen Windows-Kommandozeile läuft?
    Ich habe das klassische "Hallo Welt" probiert, und das läuft prima in der bash-shell von cygwin, aber in der windoweskommandozeile(auf selbem PC) bekomme ich beim aufruf "C:\hallo" folgenden Fehler(Alert-Box):

    hallo.exe - DLL nuicht gefunden
    Die DLL cygwin1.dll wurde nucht am angegebbenen Pfad
    C:;C:\WINNT....
    gefunden

    wie bekomme uich so ein c++ Programm unter Windows selbst ans laufen, ohne großartig eine Unix-Entwicklungsumgebung zu emulieren?

    Grüße
    Andreas

    PS: das heißt nicht hallo.exe sondern hallo?!

    1. Hallo!

      hallo.exe - DLL nuicht gefunden
      Die DLL cygwin1.dll wurde nucht am angegebbenen Pfad
      C:;C:\WINNT....
      gefunden

      wie bekomme uich so ein c++ Programm unter Windows selbst ans laufen, ohne großartig eine Unix-Entwicklungsumgebung zu emulieren?

      die cygwin1.dll muss im selben Verzeichnis liegen, wie Deine .exe. Du musst diese DLL auch immer mit ausliefern, wenn deine Programme das cygwin-API nutzen. Dadurch wird auch Deine Software automatisch free-open-source. Das steht so in der Lizenz-Vereinbarung.
      http://cygwin.com/faq/faq_toc.html#TOC94

      Wenn Dein Programm das cygwin-API nicht benötigt siehe:
      http://cygwin.com/faq/faq_4.html#SEC94

      Gruß

      Axel

      1. Hi!

        die cygwin1.dll muss im selben Verzeichnis liegen, wie Deine .exe.

        Ich habs im Winnt/system32 versucht und das hat auch funktioniert, denn ich denke da gehören DLL´s hin, oder?

        Aber das ist es eigentlich nicht was ich will. Ich habe ja lediglich folgendes Script:

        #include <iostream.h>
        int main()
        {
        cout << "Hello World!" << endl;
        return 0;
        }

        Wobei selbst das - wieso muß da "endl" ans Ende? Heißt vermutlich "endline" , aber dafür gibt es doch "\n"?! "endl" muß ich ja verwenden, sonst geht es nicht, aber ich verstehe nicht so ganz wieso, und wieso es dann noch "\n" gibt?!

        Genauso wenig verstehe ich warum das ganze in einer Funktion stehen muß, und auch warum diese einen Rückgabewert braucht, denn wenn ich den von 0 auf 1 verändere funktioniert es weiter!?

        Aber vermutlich muß ich das alles einfach hinnehmen und mich erstmal einarbeiten, dann werde ich es wohl früher oder später im Zusammenhang verstehen.

        Du musst diese DLL auch immer mit ausliefern, wenn deine Programme das cygwin-API nutzen.

        Was heißt das denn genau die "cygwin-API nutzen"? Für das bekloppte Script oben, wie kann es sein dass ich da ne eigene DLL brauche? Vermutlich sind die Standard-Windows DLLs doch mächtig genug um "Hello World" über die Standardausgabe auszugeben, oder?

        Dadurch wird auch Deine Software automatisch free-open-source. Das steht so in der Lizenz-Vereinbarung.
        http://cygwin.com/faq/faq_toc.html#TOC94

        Das ist mir total egal! Mit Lizenzen etc. kann ich mich später auseinandersetzen, ich würde aber erstmal gerne verstehen wie das ganze funktioniert ;-), vor allem wie ich möglichst einfach ein C++ Programm schreibe, das ohne zusätzliche Voraussetzungen auf einem normalen Windows-Rechner läuft. In meinem Script greife ich ja auf eine Header-Datei zurück(iostream.h), die wird dann beim Kompilieren mit eingearbeitet, so dass Windows damit umgehen kann, oder? Ist das dann abhängig von der DLL?

        Wenn Dein Programm das cygwin-API nicht benötigt siehe:
        http://cygwin.com/faq/faq_4.html#SEC94

        Keinen Schimmer ;-)
        Aber was braucht man für "Hello World" großartiges? Ich will nur irgendwie "Hello World" in der Win-Shell ausgeben lassen, ohne eine extra DLL zu benötigen. Lizenzen sind wie gesagt egal, es geht erstmal um die Funktionalität!

        Jedenfalls schonmal vielen Dank für Deine Antwort. Wenn jemand noch Tipps, Links, Buchempfehlungen oder was auch immer für den Einstieg in C++ hat bin ich sehr dankbar! Mich interessieren zum einen die Unterschiede zw. Unix und Windows, für das was man braucht um auf beiden System ein Kommandozeilen-Script zu schreiben, wie man dann irgendwann daraus an eine GUI kommt, und wie man eine richtige Anwendung schreibt, die ein "Gedächtnis" hat, also in PHP brauche ich ja immer einen Session-Mechanismus um Informationen von einem ins andere Script zu übertragen, ich habe mal gehört dass das in C++ anders sei, aber ich habe keine Ahnung. Ich weiß auch das C++ wahnsinnig kompliziert ist(wenn ich selbst bei Hello World Problemem bekomme, au Mann!), und ich weiß auch das gerade die beiden letzen Punkte die ich genannt habe nichts für Anfänger sind, aber das ist so zu sagen mal ein etwas weit gestecktes Ziel.

        Grüße
        Andreas

        PS:
        Wie ist das denn unter Unix? Vermutlich gibt es da doch keine DLLs, oder? Worauf greift das Programm dann zurück? Kann ich das auf Linux standardmäßig mit einem C-Compiler kompilieren und dass dann auf jedem Unix als "Programm" starten, so wie Tools wie "gzip"...?

        1. Hallo Andreas,

          Ich habs im Winnt/system32 versucht und das hat auch funktioniert, denn ich denke da gehören DLL´s hin, oder?

          wenn sie von mehreren Programmen genutzt werden, ja. Wenn sie nur von einem Programm genutzt werden, nein.

          Aber das ist es eigentlich nicht was ich will. Ich habe ja lediglich folgendes Script:

          #include <iostream.h>
          int main()
          {
          cout << "Hello World!" << endl;
          return 0;
          }

          Wobei selbst das - wieso muß da "endl" ans Ende? Heißt vermutlich "endline" , aber dafür gibt es doch "\n"?! "endl" muß ich ja verwenden, sonst geht es nicht, aber ich verstehe nicht so ganz wieso, und wieso es dann noch "\n" gibt?!

          AFAIK ist endl (schon ewig nix mehr mit iostream gemacht) eine Konstante, die je nach OS anders definiert ist. (UNIX: \n, Windows: \r\n, MAC: entweder \r oder \n\r - erinnere mich nicht mehr so genau)

          Genauso wenig verstehe ich warum das ganze in einer Funktion stehen muß, und auch warum diese einen Rückgabewert braucht, denn wenn ich den von 0 auf 1 verändere funktioniert es weiter!?

          Die Funktion main() ist immer der Start eines C/C++ Porgramms. Anders als in PHP dürfen außerhalb von Funktionen nur Präprozessoranweisungen, Variablendeklarationen und Typendeklarationen (inkl. class, struct, typedef, etc.) stehen. Der Rückgabewert von main() ist auch der Rückgabewert des Programms. 0 bedeutet "alles ok" und alles andere als 0 bedeutet, dass irgendein Fehler auftrat. Welche Zahl Du für welchen Fehler verwendest, ist egal.

          Was heißt das denn genau die "cygwin-API nutzen"? Für das bekloppte Script oben, wie kann es sein dass ich da ne eigene DLL brauche? Vermutlich sind die Standard-Windows DLLs doch mächtig genug um "Hello World" über die Standardausgabe auszugeben, oder?

          Die cygwin-API brauchst Du dann, wenn Du über ANSI-C++ und Win32 hinaus gehst. (also POSIX) Dein Skript daoben braucht keine _zusätzlichen_ DLLs, aber _jedes_ Programm unter Windows braucht AFAIK mindestens user.exe (ist eine "Art" DLL) und kernel32.dll.

          Das ist mir total egal! Mit Lizenzen etc. kann ich mich später auseinandersetzen, ich würde aber erstmal gerne verstehen wie das ganze funktioniert ;-), vor allem wie ich möglichst einfach ein C++ Programm schreibe, das ohne zusätzliche Voraussetzungen auf einem normalen Windows-Rechner läuft. In meinem Script greife ich ja auf eine Header-Datei zurück(iostream.h), die wird dann beim Kompilieren mit eingearbeitet, so dass Windows damit umgehen kann, oder? Ist das dann abhängig von der DLL?

          Nicht ganz. Im Header stehen nur die Deklarationen. Für die Standard-Header hat der Linker (nicht Compiler, obwohl c++ beides macht) automatisch eine Liste der benötigten Bibliotheken (bzw. Referenzen) parat, sonst musst Du mit -l <bibliothek> arbeiten. (wie das jetzt genau unter Cygwin geht, weiß ich aber nicht, hab' bisher auch nur "Hello World" gemacht)

          Aber was braucht man für "Hello World" großartiges? Ich will nur irgendwie "Hello World" in der Win-Shell ausgeben lassen, ohne eine extra DLL zu benötigen. Lizenzen sind wie gesagt egal, es geht erstmal um die Funktionalität!

          iostream.h ist Teil von Ansi-C++. Daher brauchst Du keine weiteren Bibliotheken und kannst auf Cygwin verzichten.

          wie man dann irgendwann daraus an eine GUI kommt

          Da gibt's mehrere Möglichkeiten. Zum einen kannst Du auf die Nativen APIs zugreifen (XLib, Win32) aber das ist ein Grauen (Win32 ein klein wenig mehr, aber ich will XLib nicht beschönigen) => daher brauchst Du ein Toolkit, das das ganze für dich macht. Da gibt es QT (gibt's für UNIX unter der GPL und für Windows in 2 Versionen (ich rede jetzt nur mal von kostenloser Software): eine Offizielle "nicht-kommerzielle" Version, die Direkt auf die Windows-API aufsetzt und eine Inoffizielle, die in Cygwin läuft und einen eigenen X-Server für Windows braucht - mit letzterer gibt's auch KDE für Windows) GTK+ (hab' mich noch nicht so mit befasst, schau' mal bei http://www.gimp.org/~tml/gimp/win32/ vorbei für die Windows-Version) und wxWindows (hab' ich nur mal von gelesen)

          , und wie man eine richtige Anwendung schreibt, die ein "Gedächtnis" hat, also in PHP brauche ich ja immer einen Session-Mechanismus um Informationen von einem ins andere Script zu übertragen, ich habe mal gehört dass das in C++ anders sei, aber ich habe keine Ahnung. Ich weiß auch das C++ wahnsinnig kompliziert ist(wenn ich selbst bei Hello World Problemem bekomme, au Mann!), und ich weiß auch das gerade die beiden letzen Punkte die ich genannt habe nichts für Anfänger sind, aber das ist so zu sagen mal ein etwas weit gestecktes Ziel.

          Naja - fürs Gedächtnis gibt's mehrere Möglichkeiten. Du kannst natürlich immer in eigenen Dateien Daten ablegen. Unter Windows gibts da 2 Varianten: .ini-Files und die Registry. Unter UNIX werden die Daten meinstens unter dem Homedir als .<programmname>rc oder als .<programmname>/<dateiname> abgelegt.

          Wie ist das denn unter Unix? Vermutlich gibt es da doch keine DLLs, oder?

          Nicht ganz. Es gibt sog. "Shared Objects", die ähnlich funktionieren.

          Worauf greift das Programm dann zurück? Kann ich das auf Linux standardmäßig mit einem C-Compiler kompilieren und dass dann auf jedem Unix als "Programm" starten, so wie Tools wie "gzip"...?

          Nein. Die Programme brauchen alle mindestens die Libc-Bibliothek. (/lib/libc6*.so) Desweiteren brauchen Sie u.U. noch weitere Bibliotheken. Die libc setzt direkt auf den Linux-Kernel auf. Weitere Bibliotheken setzen meistens auf die libc auf, aber u.U. auch auf den Kernel. Man kann die (alle oder auch nur bestimmte) Bibliotheken theoretisch statisch einkompilieren, aber unter Linux kompilierte Programme sind höchstens in einem Emulator unter anderen UNIX-Derivaten lauffähig, Quellcode-Kompatibilität (d.h. dass man den Quelltext nur noch unter dem anderen System neu übersetzen muss) ist dagegen einfacher: Sie müssen "nur" POSIX-Konform sein.

          Grüße,

          Christian

          1. Hi!

            #include <iostream.h>
            int main()
            {
            cout << "Hello World!" << endl;
            return 0;
            }

            AFAIK ist endl (schon ewig nix mehr mit iostream gemacht) eine Konstante, die je nach OS anders definiert ist. (UNIX: \n, Windows: \r\n, MAC: entweder \r oder \n\r - erinnere mich nicht mehr so genau)

            Naja, aber ohne endl bekomme ich eine Fehlermeldung, das verstehe ich halt nicht!

            cout << "Hello World!" << ;

            gibt einen Fehler vor ";" zurück,

            cout << "Hello World!" << endl; funktioniert dagegen prima.

            Was heißt das denn genau die "cygwin-API nutzen"? Für das bekloppte Script oben, wie kann es sein dass ich da ne eigene DLL brauche? Vermutlich sind die Standard-Windows DLLs doch mächtig genug um "Hello World" über die Standardausgabe auszugeben, oder?

            Die cygwin-API brauchst Du dann, wenn Du über ANSI-C++ und Win32 hinaus gehst. (also POSIX) Dein Skript daoben braucht keine _zusätzlichen_ DLLs, aber _jedes_ Programm unter Windows braucht AFAIK mindestens user.exe (ist eine "Art" DLL) und kernel32.dll.

            Dachte ich mir, aber wie schaffe ich es, dass ich das Programm kompiliere so dass es auf die Windows DLL zurückgreift?

            Ich hab es mit

            gcc -mno-cygwin -o test hallo.cpp

            versucht, aber das will nmicht funktionieren, da bekomme ich 100 Fehler wie  "undefined reference to cout", "undefined reference to ostream::operator<<<int>"...

            Brauche ich dann vielleicht einen anderen Header und andere Befehler?

            Aber was braucht man für "Hello World" großartiges? Ich will nur irgendwie "Hello World" in der Win-Shell ausgeben lassen, ohne eine extra DLL zu benötigen. Lizenzen sind wie gesagt egal, es geht erstmal um die Funktionalität!

            iostream.h ist Teil von Ansi-C++. Daher brauchst Du keine weiteren Bibliotheken und kannst auf Cygwin verzichten.

            Aber ich muß es ja mit cygwin kompilieren, bzw. mit gcc, aber das läuft wohl nicht direkt unter windows.

            Naja - fürs Gedächtnis gibt's mehrere Möglichkeiten. Du kannst natürlich immer in eigenen Dateien Daten ablegen. Unter Windows gibts da 2 Varianten: .ini-Files und die Registry. Unter UNIX werden die Daten meinstens unter dem Homedir als .<programmname>rc oder als .<programmname>/<dateiname> abgelegt.

            Das wäre ja weiter so eine Art Session, aber machen das alle Programme so? Ich meine, wenn ich ein programm öffne, udn ich verändere einstellungen bleibt das machmal nur zur Laufzeit. Also wie ich das sehe gibt s 3 Stufen
            1. conf-Datein/Registry um grundlegende Dinge fest zu speichern
            2. was weiß ich um Information für die Laufzeit eines Programmes zu speichern
            3. Informatioenn in Variablen für die LAufzeit eines Scriptes zu speichern.

            Das Problem bei 2. besteht darin, dass ein Programm ja oft aus mehreren Datein oder mehreren Fenstern besteht besteht, wo die Informationen alle irgendwie gespeichert werden müssen, udn nach Ende wieder weg sind.

            Wie ist das denn unter Unix? Vermutlich gibt es da doch keine DLLs, oder?

            Nicht ganz. Es gibt sog. "Shared Objects", die ähnlich funktionieren.

            Worauf greift das Programm dann zurück? Kann ich das auf Linux standardmäßig mit einem C-Compiler kompilieren und dass dann auf jedem Unix als "Programm" starten, so wie Tools wie "gzip"...?

            Nein. Die Programme brauchen alle mindestens die Libc-Bibliothek. (/lib/libc6*.so) Desweiteren brauchen Sie u.U. noch weitere Bibliotheken. Die libc setzt direkt auf den Linux-Kernel auf. Weitere Bibliotheken setzen meistens auf die libc auf, aber u.U. auch auf den Kernel. Man kann die (alle oder auch nur bestimmte) Bibliotheken theoretisch statisch einkompilieren, aber unter Linux kompilierte Programme sind höchstens in einem Emulator unter anderen UNIX-Derivaten lauffähig, Quellcode-Kompatibilität (d.h. dass man den Quelltext nur noch unter dem anderen System neu übersetzen muss) ist dagegen einfacher: Sie müssen "nur" POSIX-Konform sein.

            Ach ja! Auf Linux wird ja alles immer extra kompiliert, daher das ganze Gehampel mit dem Source-Code! Aber unter Windows ist das ja anders, das wird einmal (vor?)-kompiliert, und läuft dann auf sämtlichen Versionen von 95-XP, oder? Die Unterschiede die bei Linux durch das jeweils verschiedene Compilierenausgeglichen werden, werden bei Windows wohl durch den jeweiligen Installer ausgeglichen, der je nachdem verschiedene VErsionen einiger kompilierter Dateien "installert" oder habe ich das falsch vestanden?

            Viele Grüße
            Andreas

            1. Hallo,

              cout << "Hello World!" << ;

              ^
                                          da fehlt natürlich ein Ausdruck

              cout << "Hello World!" << "\n";

              oder gleich

              cout << "Hello World!\n";

              Ich hab es mit

              gcc -mno-cygwin -o test hallo.cpp

              versucht, aber das will nmicht funktionieren, da bekomme ich 100 Fehler wie  "undefined reference to cout", "undefined reference to ostream::operator<<<int>"...

              Brauche ich dann vielleicht einen anderen Header und andere Befehler?

              Andere Header nicht, aber warscheinlich musst Du dem Linker noch sagen, dass er andere Bibliotheken verwenden soll. Wie gesagt, ich kenne mich mit Cygwin nicht soo sehr aus, daher überlasse ich das lieber mal einem Experten.

              Das wäre ja weiter so eine Art Session, aber machen das alle Programme so? Ich meine, wenn ich ein programm öffne, udn ich verändere einstellungen bleibt das machmal nur zur Laufzeit.

              Klar - dann speichern die halt nichts ab.

              Also wie ich das sehe gibt s 3 Stufen

              1. conf-Datein/Registry um grundlegende Dinge fest zu speichern
              2. was weiß ich um Information für die Laufzeit eines Programmes zu speichern
              3. Informatioenn in Variablen für die LAufzeit eines Scriptes zu speichern.

              2 und 3 sind irgendwie das gleiche...

              Das Problem bei 2. besteht darin, dass ein Programm ja oft aus mehreren Datein oder mehreren Fenstern besteht besteht, wo die Informationen alle irgendwie gespeichert werden müssen, udn nach Ende wieder weg sind.

              Wieso "wo sie gespeichert werden"? Ich meine, es gibt 3 Ansätze für Programme mit mehreren Fenstern: pro Fenster 1 Instanz, pro Fenster 1 Thread und alle Fenster in einem Prozess. Alles mit seinen Vor- und Nachteilen.

              Ach ja! Auf Linux wird ja alles immer extra kompiliert, daher das ganze Gehampel mit dem Source-Code! Aber unter Windows ist das ja anders, das wird einmal (vor?)-kompiliert, und läuft dann auf sämtlichen Versionen von 95-XP, oder? Die Unterschiede die bei Linux durch das jeweils verschiedene Compilierenausgeglichen werden, werden bei Windows wohl durch den jeweiligen Installer ausgeglichen, der je nachdem verschiedene VErsionen einiger kompilierter Dateien "installert" oder habe ich das falsch vestanden?

              Nicht ganz. Ein Programm, das unter z.B. SuSE Linux 7.3 kompiliert wurde, "läuft" im Normalfall auch auf Debian 3.0, ist halt nur nicht auf diese Distribution angepasst. (und müllt u.U. bestimmte Pfade zu) Nur wenn Bibliotheken nicht in der passenden Version vorliegen, müssen diese _zusätzlich_ in das Bibliotheksverzeichnis kopiert werden. (und danach muss ein ldconfig laufen gelassen werden, um den "Linker Cache" upzudaten) Unter UNIX haben "shared objects" die Version schon im Dateinamen mit drinnen, d.h. man kann von einer Bibliothek theoretisch unendlich viele Versionen installieren. Nur wenn Du ein Linux-Programm auf einem anderen UNIX-Derivat laufen lassen willst, mit einer anderen Kernel-Architektur (z.B. HURD, *BSD, Solaris, HP-UX, AIX), dann musst Du neukompilieren. (sofern diese Programme sich an POSIX halten, wenn sie aber darüber hinaus gehen, dann müssen sie natürlich für jedes System verschiedenen Code mitbringen)

              Grüße,

              Christian

              1. Hallo!

                cout << "Hello World!" << ;
                                            ^
                                            da fehlt natürlich ein Ausdruck

                cout << "Hello World!" << "\n";

                oder gleich

                cout << "Hello World!\n";

                ah so ;-) Frag mich dann nur warum das in einem Beispiel das ich vorigen hatte ohne Erklärung parallel verwendet wurde.

                Ich hab es mit

                gcc -mno-cygwin -o test hallo.cpp

                versucht, aber das will nmicht funktionieren, da bekomme ich 100 Fehler wie  "undefined reference to cout", "undefined reference to ostream::operator<<<int>"...

                Brauche ich dann vielleicht einen anderen Header und andere Befehler?

                Andere Header nicht, aber warscheinlich musst Du dem Linker noch sagen, dass er andere Bibliotheken verwenden soll. Wie gesagt, ich kenne mich mit Cygwin nicht soo sehr aus, daher überlasse ich das lieber mal einem Experten.

                Naja, das weiß ich natürlich überhaupt nicht wie das geht ;-) Aber was ist denn der "Linker"? Udn was hat es mit den verschiedenen header-Dateien aus sich? Du hast gesagt Du hast mit der <iostream.h> lange nicht mehr garbeitet, was verwendest Du sonst und wieso? Muß ich dann für jede Header-Datei total umlernen?

                Das wäre ja weiter so eine Art Session, aber machen das alle Programme so? Ich meine, wenn ich ein programm öffne, udn ich verändere einstellungen bleibt das machmal nur zur Laufzeit.

                Klar - dann speichern die halt nichts ab.

                Also wie ich das sehe gibt s 3 Stufen

                1. conf-Datein/Registry um grundlegende Dinge fest zu speichern
                2. was weiß ich um Information für die Laufzeit eines Programmes zu speichern
                3. Informatioenn in Variablen für die LAufzeit eines Scriptes zu speichern.

                2 und 3 sind irgendwie das gleiche...

                wie gesagt kenn ich ich mich wenig aus und kann das nicht so gut ausdrücken, vermutlich meinte ich sowas wie Du unten ;-)

                Das Problem bei 2. besteht darin, dass ein Programm ja oft aus mehreren Datein oder mehreren Fenstern besteht besteht, wo die Informationen alle irgendwie gespeichert werden müssen, udn nach Ende wieder weg sind.

                Wieso "wo sie gespeichert werden"? Ich meine, es gibt 3 Ansätze für Programme mit mehreren Fenstern: pro Fenster 1 Instanz, pro Fenster 1 Thread und alle Fenster in einem Prozess. Alles mit seinen Vor- und Nachteilen.

                Naja, aber das Kapitel kommt vermutlich später ;-)

                Nicht ganz. Ein Programm, das unter z.B. SuSE Linux 7.3 kompiliert wurde, "läuft" im Normalfall auch auf Debian 3.0, ist halt nur nicht auf diese Distribution angepasst. (und müllt u.U. bestimmte Pfade zu) Nur wenn Bibliotheken nicht in der passenden Version vorliegen, müssen diese _zusätzlich_ in das Bibliotheksverzeichnis kopiert werden. (und danach muss ein ldconfig laufen gelassen werden, um den "Linker Cache" upzudaten) Unter UNIX haben "shared objects" die Version schon im Dateinamen mit drinnen, d.h. man kann von einer Bibliothek theoretisch unendlich viele Versionen installieren. Nur wenn Du ein Linux-Programm auf einem anderen UNIX-Derivat laufen lassen willst, mit einer anderen Kernel-Architektur (z.B. HURD, *BSD, Solaris, HP-UX, AIX), dann musst Du neukompilieren. (sofern diese Programme sich an POSIX halten, wenn sie aber darüber hinaus gehen, dann müssen sie natürlich für jedes System verschiedenen Code mitbringen)

                Hab auch noch nie richtig mit Linux gearbeitet, eigentlich fast nur auf meinem webserver mit SSH. Scheint aber ne Ecke komplizierter zu sein als PHP/PERL, vor allem da ich in C++ ja leider nicht die vielen schönen Funktionen und Module habe wie ich PHP und MySQL! Wenn ich denn mal so einen Einstieg gefunden habe und die Grundlagen kann, ist es dann schwierig ein GUI-Tool ür Win zu basteln? Ich weiß, kann man nicht pauschal beantworten, nur habe ich zur Zeit übehaupt keine Vorstellung was da auf mich zukommt, und geht das überhaupt vernünftig ohne MS Visual Studio oder Visual C++?

                Vilen Dank schonmal und viele Grüße
                Andreas

                1. Hallo,

                  gcc -mno-cygwin -o test hallo.cpp

                  versucht, aber das will nmicht funktionieren, da bekomme ich 100 Fehler wie  "undefined reference to cout", "undefined reference to ostream::operator<<<int>"...

                  "undefined reference to xxx" ist eine Fehlermeldung vom Linker, wobei xxx eine Funktion ist, die benutzt wurde aber nirgendwo definiert. "<<" ist übrigens auch eine Funktion, auch wenn si nicht so aussieht. Steht ja auch in der zweiten Fehlermeldung:
                  "undefined reference to ostream::operator<<<int>"
                                                                                 ^^^^
                  Wobei das <int> bedeutet, das die Funktion "ostream::operator<<" Integer als Argument haben will. Die einzelnen Zeichen einer Zeichenkette werden computerintern als Integer dargestellt. Ja, das heißt auch, das man damit rechnen kann ;-)

                  Brauche ich dann vielleicht einen anderen Header und andere Befehler?

                  Etwas auf die Standardausgabe auszugeben ist intern ein recht komplizierter Vorgang. Da müssen Dateien geöffnet und beschrieben werden, alles kontrolliert und evt gebuffert, Speicher alloziert und freigegeben usw.
                  Das kannst Du selbstverständlich auch alles selber machen, allerdings solltest Du das doch tunlichst den entsprechenden Bibliotheken überlassen, das ist erheblich bequemer.

                  Andere Header nicht, aber warscheinlich musst Du dem Linker noch sagen, dass er andere Bibliotheken verwenden soll. Wie gesagt, ich kenne mich mit Cygwin nicht soo sehr aus, daher überlasse ich das lieber mal einem Experten.
                  Naja, das weiß ich natürlich überhaupt nicht wie das geht ;-) Aber was ist denn der "Linker"?

                  Ein Linker ist ein kleines Progrämmchen, das die Funktionen aus Deinem Programm raussucht und mit den entsprechenden Funktionen in den passenden Bibliotheken verknüpft und in die rechte Reihenfolge bringt (wenn er gut ist). Außerdem kann er auch noch verschiedene Teilbinaries zusammenfassen.

                  Udn was hat es mit den verschiedenen header-Dateien aus sich? Du hast gesagt Du hast mit der <iostream.h> lange nicht mehr garbeitet, was verwendest Du sonst und wieso? Muß ich dann für jede Header-Datei total umlernen?

                  Nein, nicht umlernen, sondern nur lernen. Es gibt eine Reihe von Standardfunktionen, die in einer kleinen Reihe Header defniniert werden. Die gilt es zu lernen, die sollten sitzen, es sind auch nicht viele.
                  Außerdem sollte bekannt sein, wie so ein Header funktioniert, damit man auch fremde Header lesen kann, denn in diesen Headern ist die nötige Information um unbekannte Funktionen nutzen zu können.

                  Hab auch noch nie richtig mit Linux gearbeitet, eigentlich fast nur auf meinem webserver mit SSH. Scheint aber ne Ecke komplizierter zu sein als PHP/PERL, vor allem da ich in C++ ja leider nicht die vielen schönen Funktionen und Module habe wie ich PHP und MySQL!

                  Direkt nicht, indirekt vielleicht, denn es ist durchaus möglich, das sich schonmal jemand hingesetzt hat und eine entspr Bibliothek geschrieben hat.
                  Nur gilt es die zu finden ;-)

                  Wenn ich denn mal so einen Einstieg gefunden habe und die Grundlagen kann, ist es dann schwierig ein GUI-Tool ür Win zu basteln?

                  Kommt auf die GUI Bibliothek an. Wenn Du z.B. QT nimmst ist es relativ einfach.
                  (Ich weiß allerdings nicht, ob schon jemand die GPL Version von QT nach Windows hin portiert hat)

                  Ich weiß, kann man nicht pauschal beantworten, nur habe ich zur Zeit übehaupt keine Vorstellung was da auf mich zukommt, und geht das überhaupt vernünftig ohne MS Visual Studio oder Visual C++?

                  Es geht _nur_ vernünftig _ohne_ den Visual Crap.

                  Die enhaltenen Compiler sind nicht besonders und zusammenklicken kannst Du Deine GUI auch mit dem Designer von QT, der kost' nix, der ist schon dabei, falls Du QT nehmen solltest. Und die paar extra Bibliotheken, die da noch bei Visual* dabei sind, sind das Geld nicht wert. Das einzig Interessante wäre die ganze Dokumentation, aber die gibt es fast alle auch im Netz und vor allem: dafür soviel Kohle ausgeben? Na, ich weiß ja nicht ;-)

                  Nein, bevor Du eine IDE nutzt solltest Du zumindest eineige kleiner Anwendungen mit GUI von Hand geschrieben haben, dann erst kannst Du IDEs auch richtig nutzen. Und wenn Du soweit bist, nimm keine IDEs von MS, es gibt für das Geld bessere.

                  BTW: lernst Du eigentlich nach Buch?

                  so short

                  Christoph Zurnieden

                  1. Hallo!

                    Etwas auf die Standardausgabe auszugeben ist intern ein recht komplizierter Vorgang. Da müssen Dateien geöffnet und beschrieben werden, alles kontrolliert und evt gebuffert, Speicher alloziert und freigegeben usw.
                    Das kannst Du selbstverständlich auch alles selber machen, allerdings solltest Du das doch tunlichst den entsprechenden Bibliotheken überlassen, das ist erheblich bequemer.

                    Das sowieso! Aber woher weiß man sowas vorher ;-)

                    Ein Linker ist ein kleines Progrämmchen, das die Funktionen aus Deinem Programm raussucht und mit den entsprechenden Funktionen in den passenden Bibliotheken verknüpft und in die rechte Reihenfolge bringt (wenn er gut ist). Außerdem kann er auch noch verschiedene Teilbinaries zusammenfassen.

                    Mich wundet auch das mein Hallo-Welt Programm so groß ist - 442 KB, ist das nicht etwas Happig für so ein lächerliches Programm?

                    Udn was hat es mit den verschiedenen header-Dateien aus sich? Du hast gesagt Du hast mit der <iostream.h> lange nicht mehr garbeitet, was verwendest Du sonst und wieso? Muß ich dann für jede Header-Datei total umlernen?

                    Nein, nicht umlernen, sondern nur lernen. Es gibt eine Reihe von Standardfunktionen, die in einer kleinen Reihe Header defniniert werden. Die gilt es zu lernen, die sollten sitzen, es sind auch nicht viele.

                    Naja, da muß man wohl mal durch...

                    Außerdem sollte bekannt sein, wie so ein Header funktioniert, damit man auch fremde Header lesen kann, denn in diesen Headern ist die nötige Information um unbekannte Funktionen nutzen zu können.

                    Das auch noch? Au man... ich seh schon, das ist sogar noch komplizierter als ich mir das vorgestellt habe...

                    Hab auch noch nie richtig mit Linux gearbeitet, eigentlich fast nur auf meinem webserver mit SSH. Scheint aber ne Ecke komplizierter zu sein als PHP/PERL, vor allem da ich in C++ ja leider nicht die vielen schönen Funktionen und Module habe wie ich PHP und MySQL!

                    Direkt nicht, indirekt vielleicht, denn es ist durchaus möglich, das sich schonmal jemand hingesetzt hat und eine entspr Bibliothek geschrieben hat.
                    Nur gilt es die zu finden ;-)

                    Und was sind DLLs? Die kann man ja auch nicht lesen(warum?), werden die auch aus C-Code kompiliert? Wie erstellt man denn eigene DLLs?

                    Wenn ich denn mal so einen Einstieg gefunden habe und die Grundlagen kann, ist es dann schwierig ein GUI-Tool ür Win zu basteln?

                    Kommt auf die GUI Bibliothek an. Wenn Du z.B. QT nimmst ist es relativ einfach.
                    (Ich weiß allerdings nicht, ob schon jemand die GPL Version von QT nach Windows hin portiert hat)

                    Ich weiß, kann man nicht pauschal beantworten, nur habe ich zur Zeit übehaupt keine Vorstellung was da auf mich zukommt, und geht das überhaupt vernünftig ohne MS Visual Studio oder Visual C++?

                    Es geht _nur_ vernünftig _ohne_ den Visual Crap.

                    Die enhaltenen Compiler sind nicht besonders und zusammenklicken kannst Du Deine GUI auch mit dem Designer von QT, der kost' nix, der ist schon dabei, falls Du QT nehmen solltest. Und die paar extra Bibliotheken, die da noch bei Visual* dabei sind, sind das Geld nicht wert. Das einzig Interessante wäre die ganze Dokumentation, aber die gibt es fast alle auch im Netz und vor allem: dafür soviel Kohle ausgeben? Na, ich weiß ja nicht ;-)

                    Ja, aber was bringt mir das wenn es kein anderes Programm für Windows gibt? Wenn es QT nicht gibt, was verwenden dann alle anderen die die ganzen C++ GUI-Tools schreiben? ODer sollte man für GUI doch liber auf DELPHI oder JAVA zurückgreifen(was ich beides auch noch nicht kann aber auch lernen will, wenn es denn Sinn macht)

                    Nein, bevor Du eine IDE nutzt solltest Du zumindest eineige kleiner Anwendungen mit GUI von Hand geschrieben haben, dann erst kannst Du IDEs auch richtig nutzen. Und wenn Du soweit bist, nimm keine IDEs von MS, es gibt für das Geld bessere.

                    ist QT und Visual C++ also eine IDE? Was heitß IDE?

                    BTW: lernst Du eigentlich nach Buch?

                    Noch nicht, ich habe ja noch gar nicht richtig angefangen. Ich wollte mir erstmal einen kleinen Überblick mit Hilfe eines Tutorials von c-plusplus.de und dem Script eines Einführungskurses meiner Uni machen. Dann wollt eich mir mal ein vernündfirges C++ Buch zulegen, hat da vielleicht jemand eine Empfehleung, in Anbetracht meiner doch sehr geringen Vorkenntenisse?

                    Viele Grüße
                    Andreas

                    1. Hallo,

                      Etwas auf die Standardausgabe auszugeben ist intern ein recht komplizierter Vorgang. Da müssen Dateien geöffnet und beschrieben werden, alles kontrolliert und evt gebuffert, Speicher alloziert und freigegeben usw.
                      Das kannst Du selbstverständlich auch alles selber machen, allerdings solltest Du das doch tunlichst den entsprechenden Bibliotheken überlassen, das ist erheblich bequemer.
                      Das sowieso! Aber woher weiß man sowas vorher ;-)

                      Tja, das muß man lernen. Zumindest sollte man wissen, wo man nachschlagen kann ;-)

                      Ein Linker ist ein kleines Progrämmchen, das die Funktionen aus Deinem Programm raussucht und mit den entsprechenden Funktionen in den passenden Bibliotheken verknüpft und in die rechte Reihenfolge bringt (wenn er gut ist). Außerdem kann er auch noch verschiedene Teilbinaries zusammenfassen.
                      Mich wundet auch das mein Hallo-Welt Programm so groß ist - 442 KB, ist das nicht etwas Happig für so ein lächerliches Programm?

                      Das sind die statisch gelinkten Bibliotheken. Netto an Programm sind da ca 250 Bytes(!) drin.
                      Du könntest auch mal 'strip' probieren.

                      Udn was hat es mit den verschiedenen header-Dateien aus sich? Du hast gesagt Du hast mit der <iostream.h> lange nicht mehr garbeitet, was verwendest Du sonst und wieso? Muß ich dann für jede Header-Datei total umlernen?

                      Nein, nicht umlernen, sondern nur lernen. Es gibt eine Reihe von Standardfunktionen, die in einer kleinen Reihe Header defniniert werden. Die gilt es zu lernen, die sollten sitzen, es sind auch nicht viele.
                      Naja, da muß man wohl mal durch...

                      Ja, da kommst Du nicht rum.

                      Außerdem sollte bekannt sein, wie so ein Header funktioniert, damit man auch fremde Header lesen kann, denn in diesen Headern ist die nötige Information um unbekannte Funktionen nutzen zu können.
                      Das auch noch? Au man... ich seh schon, das ist sogar noch komplizierter als ich mir das vorgestellt habe...

                      Nein, ist schon alles relativ logisch aufgebaut. Richtig viel zu lernen gibt es da kaum, nur zu verstehen gibt es sehr viel.

                      Hab auch noch nie richtig mit Linux gearbeitet, eigentlich fast nur auf meinem webserver mit SSH. Scheint aber ne Ecke komplizierter zu sein als PHP/PERL, vor allem da ich in C++ ja leider nicht die vielen schönen Funktionen und Module habe wie ich PHP und MySQL!

                      Direkt nicht, indirekt vielleicht, denn es ist durchaus möglich, das sich schonmal jemand hingesetzt hat und eine entspr Bibliothek geschrieben hat.
                      Nur gilt es die zu finden ;-)
                      Und was sind DLLs?

                      _D_ynamic _L_oadable _L_ibrarues (Dynamisch ladbare Bibliotheken)

                      Die kann man ja auch nicht lesen(warum?),

                      Auch die kann man lesen, sonst käme der Linker ja nicht damit zurecht.
                      Allerdings sind sie compiliert, also in Maschinencode, nicht "human readable" ("Human" ist lediglich eine Untermenge aller Menschen, es gibt durchaus noch eine handvoll Leute, die auch mit Maschinencode zurechtkommen)

                      werden die auch aus C-Code kompiliert?

                      In welcher Sprache die geschrieben wurden ist nachträglich nicht mehr feststellbar (Praktisch, theoretisch gibt es schon ein paar Möglichkeiten, aber unsicher). Allerdings ist anzunehmen, das C++ Bibliotheken auch hauptsächlich in C++ geschrieben wurden.

                      Wie erstellt man denn eigene DLLs?

                      Das ist nicht immer einfach und kommt auf den jeweiligen Linker, die Architektur und den Compiler an.
                      Das bauen von Bibliotheken kommt aber auch nicht gerade am Anfang der Lernkurve, das hat Zeit.

                      Ich weiß, kann man nicht pauschal beantworten, nur habe ich zur Zeit übehaupt keine Vorstellung was da auf mich zukommt, und geht das überhaupt vernünftig ohne MS Visual Studio oder Visual C++?

                      Es geht _nur_ vernünftig _ohne_ den Visual Crap.

                      Die enhaltenen Compiler sind nicht besonders und zusammenklicken kannst Du Deine GUI auch mit dem Designer von QT, der kost' nix, der ist schon dabei, falls Du QT nehmen solltest. Und die paar extra Bibliotheken, die da noch bei Visual* dabei sind, sind das Geld nicht wert. Das einzig Interessante wäre die ganze Dokumentation, aber die gibt es fast alle auch im Netz und vor allem: dafür soviel Kohle ausgeben? Na, ich weiß ja nicht ;-)

                      Ja, aber was bringt mir das wenn es kein anderes Programm für Windows gibt?

                      Es gibt doch jede Menge? Eine der Alternativen benutzt Du doch gerade!

                      Wenn es QT nicht gibt, was verwenden dann alle anderen die die ganzen C++ GUI-Tools schreiben?

                      Verschiedene Bibliotheken, manche verwenden auch die Windows eigene Fensterbibliothek.
                      Manch einer hat sich auch etwas Eigenes geschrieben.

                      ODer sollte man für GUI doch liber auf DELPHI oder JAVA zurückgreifen(was ich beides auch noch nicht kann aber auch lernen will, wenn es denn Sinn macht)

                      Die GUI selber zusammenbasteln ist meist ein Zusammenklicken. Das Schwierige ist das Programm. Wenn Du gerne C++ lernen möchtest, dann tue es ruhig, ist eine gute Sprache für GUIs. Lernen aber erstmal die Sprache beherschen, eine GUI zu basteln ist dann nachher kein Problem mehr.

                      Nein, bevor Du eine IDE nutzt solltest Du zumindest eineige kleiner Anwendungen mit GUI von Hand geschrieben haben, dann erst kannst Du IDEs auch richtig nutzen. Und wenn Du soweit bist, nimm keine IDEs von MS, es gibt für das Geld bessere.
                      ist QT und Visual C++ also eine IDE?

                      QT ist eine Fensterbibliothek (ist noch jede Menge anderer Kram drin, deshalb die Empfehlung), Visual Crap ist eine IDE.

                      Was heitß IDE?

                      _I_ntegrated _D_evelopment _E_nvironment.
                      Ein Programm, das, im Grobem, einen Editor, einen Designer (Fensterzusammenklickprogramm), sowie noch Compiler, Linker und einige Tools plus jede Menge Bibliotheken in sich vereinigt und gemeinhin schweineteuer ist.
                      Ist für einen Anfänger nicht zu empfehlen.

                      Ich selber programmiere seit etlichen Jahren (hauptsächlich C unter Unix) und habe noch mehr IDEs ausprobiert. Im Endeffekt hatte ich die stets nur genutzt, Fenster zusammenzuklicken, so ich ein graphisches UI brauchte. Also stets rausgeschmissen Geld. (Ich kann mich allerdings nciht entsinnen, je etwas bezahlt zu haben, die Dinger waren entweder zur Verfügung gestellt, eh umsonst, oder eine Demo ;-)

                      BTW: lernst Du eigentlich nach Buch?

                      Noch nicht, ich habe ja noch gar nicht richtig angefangen. Ich wollte mir erstmal einen kleinen Überblick mit Hilfe eines Tutorials von c-plusplus.de und dem Script eines Einführungskurses meiner Uni machen.

                      So Du denn einen Einführuingskurs an der Uni hast, sollten die auch Empfehlungen bezüglich der Austattung haben.
                      Frage einfach mal nach.

                      Dann wollt eich mir mal ein vernündfirges C++ Buch zulegen, hat da vielleicht jemand eine Empfehleung, in Anbetracht meiner doch sehr geringen Vorkenntenisse?

                      Tut mir leid, aber vielleicht liest einer mit und hat eine?

                      so short

                      Christoph Zurnieden

        2. Hallo,

          die cygwin1.dll muss im selben Verzeichnis liegen, wie Deine .exe.
          Ich habs im Winnt/system32 versucht und das hat auch funktioniert, denn ich denke da gehören DLL´s hin, oder?

          Eigentlich muß die DLL nur in einem Verzeichnis sein, das in der Umgebungsvaribale PATH angegeben wurde. Wenn Du mit cyqwin arbeitest sollest halt die entsprechenden Verzeichnisse in PATH eintragen. dann brauchst Du nichts herumkopieren. (die BAtchdatei, die Deine Cygwin-Umgebung startet macht auch nichts anderes)

          Aber das ist es eigentlich nicht was ich will. Ich habe ja lediglich folgendes Script:

          #include <iostream.h>
          int main()
          {
          cout << "Hello World!" << endl;
          return 0;
          }

          Äh, Quellcode wolltest Du sagen;-)

          Wobei selbst das - wieso muß da "endl" ans Ende? Heißt vermutlich "endline" , aber dafür gibt es doch "\n"?! "endl" muß ich ja verwenden, sonst geht es nicht, aber ich verstehe nicht so ganz wieso, und wieso es dann noch "\n" gibt?!

          muß nicht, außer Du willst einen Zeilenumbruch. Den Fehler, den Du weiter unten angesprochen hast, hast DU gemacht, weil Du nur endl entfernt hast und nicht das << davor. Dadurch hast DU einen syntaktischen Fehler produziert.

          Genauso wenig verstehe ich warum das ganze in einer Funktion stehen muß, und auch warum diese einen Rückgabewert braucht, denn wenn ich den von 0 auf 1 verändere funktioniert es weiter!?

          Beim Linken wird die Object-Datei Deines Programmes mit einem Startcode, der immer gleich ist, verbunden. Der Startcode wird ausgeführt, wenn Du das Programm startest, und dann führt dieser Code die Funktion main() aus. Es ist quasi Dein Stichwort bzw. Dein vorgegebener EInsprungspunkt. Reine Konventionssache, die man wissen muß. Wenn jemand lustig gewesen wäre, könnte diese Funktion auch dldkfkdskjhkdshkfshdak() heißen, allerdinsg bezweifle ich, ob das jemand ohne Cut&Paste verwenden würde;-)

          So wie ich das sehe, führt der Startcode auch einige Funktionen aus der von Dir angesprochenen DLL aus, wodurhc sie unentbehrlich ist. Windows benutzt einen anderen Startcode, aber eben auch einen.

          Was heißt das denn genau die "cygwin-API nutzen"? Für das bekloppte Script oben, wie kann es sein dass ich da ne eigene DLL brauche?

          Du brauchst ja für ein PHP-Script auch einiges, wie z.B. den PHP-Interpreter. Ähnlich kannst Du das auch hier sehen, aber wirklich nur ähnlich.

          Vermutlich sind die Standard-Windows DLLs doch mächtig genug um "Hello World" über die Standardausgabe auszugeben, oder?

          Nein, nur anders.

          Das ist mir total egal! Mit Lizenzen etc. kann ich mich später auseinandersetzen, ich würde aber erstmal gerne verstehen wie das ganze funktioniert ;-), vor allem wie ich möglichst einfach ein C++ Programm schreibe, das ohne zusätzliche Voraussetzungen auf einem normalen Windows-Rechner läuft. In meinem Script greife ich ja auf eine Header-Datei zurück(iostream.h), die wird dann beim Kompilieren mit eingearbeitet, so dass Windows damit umgehen kann, oder? Ist das dann abhängig von der DLL?

          Wenn Du einen freien C-Compiler ganz ohne cygwin suchst, dnan kannst Du auch den von Borland verwenden http://www.borland.com/products/downloads/download_cbuilder.html oder Du siehst Dich einmal bei http://www.c-plusplus.de/body_compiler.htm um.

          Cygwin stellt einen Sonderfall dar, weil es ja das GNU/Linux Umfeld unter Windows nachbildet, um all die tollen GNU-Tools auch unter diesem OS zur VErfügung stellen zu können.

          Wie ist das denn unter Unix? Vermutlich gibt es da doch keine DLLs, oder?

          Doch, nur heißen die da nicht so. Oder eigentlich doch so nur halt nicht dll äh naja sie heißen eben so, also nicht dll sondern so also...
          huch, wie kommen ich da nur wieder raus....
          Ach ja, sie heißen dann Shared Object oder kurz 'so' und besitzen im Dateinamen meist auch diese zwei Buchstaben als Kennzeichnung, wobei das ja nicht zwingend erforderlich ist.

          Grüße
            Klaus

          1. Hallo!

            Du brauchst ja für ein PHP-Script auch einiges, wie z.B. den PHP-Interpreter. Ähnlich kannst Du das auch hier sehen, aber wirklich nur ähnlich.

            Ja, aber ih dachte bei C++ sei das tolle das man gerade nicht einen eigenen interpreter... braucht, sondern das alles was man braucht beim OS dabei ist, also ich kompiliere den obigen "Quellcode" und erstelle so eine text.exe, und die test.exe holt sich das was sie zum laufen braucht aus den 100en DLLs die Windows bereits mitliefert, so habe ich mir das vorgestellt.

            Vermutlich sind die Standard-Windows DLLs doch mächtig genug um "Hello World" über die Standardausgabe auszugeben, oder?

            Nein, nur anders.

            Du meinst ich kann nichts über die Standardausgabe ausgeben ohne eine eigene DLL zu verwenden, jetzt mal unabhängig von cygwin?

            Wenn Du einen freien C-Compiler ganz ohne cygwin suchst, dnan kannst Du auch den von Borland verwenden http://www.borland.com/products/downloads/download_cbuilder.html oder Du siehst Dich einmal bei http://www.c-plusplus.de/body_compiler.htm um.

            Cygwin stellt einen Sonderfall dar, weil es ja das GNU/Linux Umfeld unter Windows nachbildet, um all die tollen GNU-Tools auch unter diesem OS zur VErfügung stellen zu können.

            Das ist gut, aber in diesem Moment eigentlich gar nicht das was ich will. Wenn ich denselben Code mit dem Borland-Compiler kompiliere, brauche ich dann keine extra dll? Und die header-Datei kennen auch andere Compiler?

            Wie ist das denn unter Unix? Vermutlich gibt es da doch keine DLLs, oder?
            Doch, nur heißen die da nicht so. Oder eigentlich doch so nur halt nicht dll äh naja sie heißen eben so, also nicht dll sondern so also...
            huch, wie kommen ich da nur wieder raus....
            Ach ja, sie heißen dann Shared Object oder kurz 'so' und besitzen im Dateinamen meist auch diese zwei Buchstaben als Kennzeichnung, wobei das ja nicht zwingend erforderlich ist.

            Ah ja, Danke Dir :)

            Viele Grüße
            Andreas

            1. Hallo Andreas,

              Nein, nur anders.

              Du meinst ich kann nichts über die Standardausgabe ausgeben ohne eine eigene DLL zu verwenden, jetzt mal unabhängig von cygwin?

              Doch, das kannst Du. Du musst nur mit einer anderen Bibliothek linken. Welche das ist, weiß ich aber nicht.

              Das ist gut, aber in diesem Moment eigentlich gar nicht das was ich will. Wenn ich denselben Code mit dem Borland-Compiler kompiliere, brauche ich dann keine extra dll? Und die header-Datei kennen auch andere Compiler?

              Die header-Datei iostream.h ist Teil der ANSI-C-Distribution. Die sollte jedes C++-Compiler-Paket mitliefern. Der Borland-Linker linked automatisch mit den "richtigen" Bibliotheken, der gcc unter cygwin nicht.

              Grüße,

              Christian

              1. Hallo!

                Du meinst ich kann nichts über die Standardausgabe ausgeben ohne eine eigene DLL zu verwenden, jetzt mal unabhängig von cygwin?

                Doch, das kannst Du. Du musst nur mit einer anderen Bibliothek linken. Welche das ist, weiß ich aber nicht.

                ^^^
                Ah, so einfach ist das? Wen ich das vorher gewußt hätte... ;-)

                Mensch ich habe doch  0 Ahnung! Keine Ahnung wie ich auf eine Bibliothek linke. Im Programm steht nur eine Verknüpfung zu einer Header Datei, wie ich jetzt beeinflusse auf welche Bibliotheken ich linke, davon habe ich keine Ahnung!

                Das ist gut, aber in diesem Moment eigentlich gar nicht das was ich will. Wenn ich denselben Code mit dem Borland-Compiler kompiliere, brauche ich dann keine extra dll? Und die header-Datei kennen auch andere Compiler?

                Die header-Datei iostream.h ist Teil der ANSI-C-Distribution. Die sollte jedes C++-Compiler-Paket mitliefern. Der Borland-Linker linked automatisch mit den "richtigen" Bibliotheken, der gcc unter cygwin nicht.

                Also neuen Compiler verwenden, aber der funktioniert schon wieder irgendwie anders...

                Grüße
                Andreas

            2. Hallo!

              Du brauchst ja für ein PHP-Script auch einiges, wie z.B. den PHP-Interpreter. Ähnlich kannst Du das auch hier sehen, aber wirklich nur ähnlich.
              Ja, aber ih dachte bei C++ sei das tolle das man gerade nicht einen eigenen interpreter... braucht, sondern das alles was man braucht beim OS dabei ist, also ich kompiliere den obigen "Quellcode" und erstelle so eine text.exe, und die test.exe holt sich das was sie zum laufen braucht aus den 100en DLLs die Windows bereits mitliefert, so habe ich mir das vorgestellt.

              Ja, der Nachteil ist aber, dass ein so kompiliertes Programm dann _nur_ auf dem einen System lauffähig ist. CygWin will aber gerade eine UNIX-Umgebung auf Windows-Systemen realisieren. Du willst nun aber ein natives Windows(eigentlich DOS)-Programm mit CygWin compilieren. _Hier_ liegt der Widerspruch.

              Vermutlich sind die Standard-Windows DLLs doch mächtig genug um "Hello World" über die Standardausgabe auszugeben, oder?

              Nein, nur anders.
              Du meinst ich kann nichts über die Standardausgabe ausgeben ohne eine eigene DLL zu verwenden, jetzt mal unabhängig von cygwin?

              Doch, schon. So:

              /* hello.c -- hello world example. */
                #include <stdio.h>
                int main () {
                    printf ("Hello world!\n");
                    return 0;
                }

              $ gcc -c -mno-cygwin hello.c
                $ gcc -o hello -mno-cygwin hello.o

              $ ./hello
                Hello world!

              To see what DLLs it's using:

              $ objdump -p hello.exe | grep "DLL Name"
                      DLL Name: crtdll.dll
                      DLL Name: kernel32.dll

              Aber Dein "Hello World" will ja Streams nutzen. Da ist schon eine System-spezifische Bibliothek nötig.
              http://www.nanotech.wisc.edu/~khan/software/gnu-win32/mno-cygwin-howto.txt

              Wenn Du einen freien C-Compiler ganz ohne cygwin suchst, dnan kannst Du auch den von Borland verwenden http://www.borland.com/products/downloads/download_cbuilder.html oder Du siehst Dich einmal bei http://www.c-plusplus.de/body_compiler.htm um.

              Jep.
              oder: http://www.mingw.org/

              Cygwin stellt einen Sonderfall dar, weil es ja das GNU/Linux Umfeld unter Windows nachbildet, um all die tollen GNU-Tools auch unter diesem OS zur VErfügung stellen zu können.
              Das ist gut, aber in diesem Moment eigentlich gar nicht das was ich will. Wenn ich denselben Code mit dem Borland-Compiler kompiliere, brauche ich dann keine extra dll? Und die header-Datei kennen auch andere Compiler?

              Doch, auch der Borland-Compiler linkt die Stream-Ausgabe gegen eine DLL, aber gegen die von Windows halt, weil er extra für Windows gebaut ist. CygWin will sie aber gegen ein so(shared objekt) linken, welches aus Unix kommt und in der cygwin1.dll an Windows angepasst ist.

              Wie ist das denn unter Unix? Vermutlich gibt es da doch keine DLLs, oder?
              Doch, nur heißen die da nicht so. Oder eigentlich doch so nur halt nicht dll äh naja sie heißen eben so, also nicht dll sondern so also...
              huch, wie kommen ich da nur wieder raus....
              Ach ja, sie heißen dann Shared Object oder kurz 'so' und besitzen im Dateinamen meist auch diese zwei Buchstaben als Kennzeichnung, wobei das ja nicht zwingend erforderlich ist.

              Ah ja, Danke Dir :)

              Viele Grüße
              Andreas

              Gruß

              Axel

              1. Hallo!

                Ja, der Nachteil ist aber, dass ein so kompiliertes Programm dann _nur_ auf dem einen System lauffähig ist.

                Normalerweise auf allen Windows-VErsionen, oder? Das reicht dich. Ich schreibe doch kein Tool gleichzeitig für Windows und Unix, was vor allem darin begründet ist das Windows zumeinst als Client un Unix meist als Server verwendet wird uns so auch meist andere Anfwenungen benötigt werden.

                CygWin will aber gerade eine UNIX-Umgebung auf Windows-Systemen realisieren. Du willst nun aber ein natives Windows(eigentlich DOS)-Programm mit CygWin compilieren. _Hier_ liegt der Widerspruch.

                Das wußte ich vorher nicht. Unix ist mir zunächst mal egal da ich dort genügend Tools/Scriptsprachen zur Verfügung habe, aber Client-Seitig ist das was anders, ich suche nach Möglichkeiten Programme für Clients zu schreiben, ohne das ich vorher einen HTTP-Server, PHP, PERL und ggfs noch einen DB-Server installieren und konfiurieren muß! Sicher wird sich später auch für Unix die ein oder anere Möglichkeit egeben, meine bis dahin unter Windows erworbenen C++ Kenntnisse einzusetzen, aber wie gesagt liegt mein Schwerpunkt woanders.

                Vermutlich sind die Standard-Windows DLLs doch mächtig genug um "Hello World" über die Standardausgabe auszugeben, oder?

                Nein, nur anders.
                Du meinst ich kann nichts über die Standardausgabe ausgeben ohne eine eigene DLL zu verwenden, jetzt mal unabhängig von cygwin?
                Doch, schon. So:

                /* hello.c -- hello world example. */
                  #include <stdio.h>
                  int main () {
                      printf ("Hello world!\n");
                      return 0;
                  }

                $ gcc -c -mno-cygwin hello.c

                was machst Du hier? Das ist ja noch kein Compilieren, oder? Und .c, das ict doch kein  c++, gibt es da noch Unterschiede?

                $ gcc -o hello -mno-cygwin hello.o

                ja, das kenne ich(obwohl es bei mir ja nicht funktioniert hat), aber woher hast Du jetzt hallo.o?

                Aber Dein "Hello World" will ja Streams nutzen. Da ist schon eine System-spezifische Bibliothek nötig.
                http://www.nanotech.wisc.edu/~khan/software/gnu-win32/mno-cygwin-howto.txt

                Was heißt denn System-Spezifisch? nur Windows-spezifisch, oder auch Wind2000 spezifisch...?

                Wenn Du einen freien C-Compiler ganz ohne cygwin suchst, dnan kannst Du auch den von Borland verwenden http://www.borland.com/products/downloads/download_cbuilder.html oder Du siehst Dich einmal bei http://www.c-plusplus.de/body_compiler.htm um.
                Jep.
                oder: http://www.mingw.org/

                Auweia, habe mir den von Borland gezogen, abr blicke noch nicht ganz durch, ich versuche einfach weiter ;-)

                Grüße
                Andreas

                1. Hallo Andreas,

                  Normalerweise auf allen Windows-VErsionen, oder? Das reicht dich. Ich schreibe doch kein Tool gleichzeitig für Windows und Unix, was vor allem darin begründet ist das Windows zumeinst als Client un Unix meist als Server verwendet wird uns so auch meist andere Anfwenungen benötigt werden.

                  Nun ja - mit QT kann man auch Windows _und_ UNIX-Programme schreiben, die man halt "nur"[tm] neu kompilieren muss. (und evtl. "nur"[tm] etwas anpassen muss)

                  $ gcc -c -mno-cygwin hello.c
                  was machst Du hier? Das ist ja noch kein Compilieren, oder? Und .c, das ict doch kein  c++, gibt es da noch Unterschiede?

                  Das ist kompilieren. Das -c steht ja für "compile". Das erzeugt aus der .c-Datei (C-Quelltext) eine .o-Datei (Objektdatei, d.h. schon kompiliert aber mit noch gar nichts verknüpft)

                  $ gcc -o hello -mno-cygwin hello.o
                  ja, das kenne ich(obwohl es bei mir ja nicht funktioniert hat), aber woher hast Du jetzt hallo.o?

                  Das ist das Linken. Das kennst Du nicht. Du hast ihm direkt die .c-Datei gegeben. Da hat er kompiliert und gelinkt auf einmal. Wenn Du aber anfängst, mehrere Dateien zu haben, dann _könntest_ Du sie zwar alle an gcc übergeben, aber dann kompiliert er jede einzelne jedes Mal neu, obwohl Du evtl. nur eine Datei verändert hast. Daher ist es später sinnvoller, alle Dateien erst zu kompilieren und dann erst die Objektdateien zu linken. Du brauchst dann natürlich ein Buildsystem, das Veränderungen erkennt und dadurch weiß, welche Datei jetzt neukompiliert werden muss und welche nicht; aber das kommt dann erst später. Nur jetzt mal so als Einführung.

                  Was heißt denn System-Spezifisch? nur Windows-spezifisch, oder auch Wind2000 spezifisch...?

                  Nur Windows-Spezifisch. (Win32 um genau zu sein, d.h. Win95,98,ME,NT4,2000,XP,evtl. auch NT3.51 und evtl. auch Win3.11 mit Win32s-Erweiterungen)

                  Grüße,

                  Christian

                2. Hallo!

                  /* hello.c -- hello world example. */
                    #include <stdio.h>
                    int main () {
                        printf ("Hello world!\n");
                        return 0;
                    }

                  $ gcc -c -mno-cygwin hello.c
                  was machst Du hier? Das ist ja noch kein Compilieren, oder? Und .c, das ict doch kein  c++, gibt es da noch Unterschiede?

                  Ja, c++ ist eine Erweiterung von c, und zwar um die Möglichkeit der objektorientierte Programmierung. Deshalb nutzt man (Pfui!!, man macht es nicht!! ;-)) in c++ normalerweise nicht mehr die Funktion printf, sondern Streams als Objekte. Es geht aber trotzdem noch.

                  Doch, das genau ist Compilieren. Folgendes läuft beim gcc eigentlich ab:
                  1. Präprozessor
                  Der Quellcode hello.c wird um den Quellcode der angegebenen Header (stdio.h) erweitert. In stdio.h steht z.B. die Definition der Funktion printf. Der Präprozessor kann noch mehr, aber bei diesem einfachen Programm ist das alles. Es gib dann eine hello.i
                  2. Compiler
                  Aus dem Quellcode entsteht eine Assembler-Datei hello.s bzw. hello.asm.
                  3. Assembler
                  Aus der Asembler-Datei wird eine Objekt-Datei hello.o bzw. hello.obj in Maschinensprache.

                  Die Schritte kannst Du mit Optionen am gcc auch einzeln gehen. Das macht aber kaum jemand.

                  $ gcc -o hello -mno-cygwin hello.o
                  ja, das kenne ich(obwohl es bei mir ja nicht funktioniert hat), aber woher hast Du jetzt hallo.o?

                  klar?

                  4. Linker
                  Verbindet die Objekt-Datei mit Objekt-Code aus Bibliotheken aus dem /lib-Verzeichnis des Compilers zu einem lauffähigen Programm hello.exe.

                  Aber Dein "Hello World" will ja Streams nutzen. Da ist schon eine System-spezifische Bibliothek nötig.
                  http://www.nanotech.wisc.edu/~khan/software/gnu-win32/mno-cygwin-howto.txt

                  Was heißt denn System-Spezifisch? nur Windows-spezifisch, oder auch Wind2000 spezifisch...?

                  Windows-spezifisch

                  Wenn Du einen freien C-Compiler ganz ohne cygwin suchst, dnan kannst Du auch den von Borland verwenden http://www.borland.com/products/downloads/download_cbuilder.html oder Du siehst Dich einmal bei http://www.c-plusplus.de/body_compiler.htm um.
                  Jep.
                  oder: http://www.mingw.org/
                  Auweia, habe mir den von Borland gezogen, abr blicke noch nicht ganz durch, ich versuche einfach weiter ;-)

                  Grüße
                  Andreas

                  Gruß

                  Axel