Anzeige:
Ergebnis 1 bis 13 von 13

Thema: Linux progs -> windows?

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30

    Linux progs -> windows?

    moin

    ich bin am anfang der socket programmierung und mach halt immer so kleine progrämmchen um das bisher erlernte umzusetzen ( Macht ja auch spass )

    da ich linux only user bin, progg ich die dinger unter linux ist ja klar ( programmier die hauptsätzlich dazu ) allerdings haben viele kollegen windows und ich will das die progs auch unter win laufen

    habe einfach mal getestet, wohlwissend das es wohl net geht, einfahc ein unter kdevelop compiliertes programm nen win-user geschickt er sollte es mal ausführen. bei ihm kam nur

    C:\>msdgclient.exe <eineip>
    Programm zu groß für den Arbeitsspeicher

    also muss man wohl schon den sourcecode ändern, damit es geht ( wieso geht aber zb hello world unter win und unter linux ? ). ist da viel zu ändern, geht das garnicht oder.... ?

    bin totaler newb auf dem gebiet portierung danke für hilfe tipps und ratschläge =)
    Geändert von Freekazonid (21-11-2003 um 19:59 Uhr)

  2. #2
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    Hi

    Windowsprogramme laufen nur mit Wine(X) oder ähnlichem unter Linux und umgekehrt geht das garnicht. Höchstens mit Cygwin, aber das lassen wir jetzt mal außenvor. Windows arbeitet mit eigenen Sockets. Also musst du schon einiges an deinem Code ändern, um dein Programm auch mit Windows laufen zu lassen. Mit Prekompilerstatements wird das aber kein Problem werden, es für beide Systeme gleichermaßen recht zu machen.

    Cu
    André
    C und C++

  3. #3
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30
    Hallo,

    also auf dem jeweiligen system compilierte programme gehen nicht auf einem anderen system mit einem anderen OS?

    also selbst wenn ich den ganzen code auf win "umstelle", bringt es das nicht wenn ich den unter linux compile, er läuft dann net unter windows? weil kdevelop benutzt doch auch nur den gcc und den gibbet ja auch für windows.

    den ganzen code wollte ich net umfriemeln, vorallem hab ich nicht vor windows socket zeug zu lernen für die paar leute die windows benutzen. kannst du mir was genaueres zu den precompiler sachen sagen? du meinst doch sowas wie

    #ifdef blubb
    bla
    #endif

    sowas ist der art? das habe ich mal gesehen bei einem quellcode, welcher dann unter linux und win gleichermassen gehen sollte. wie sieht denn dann sowas genau aus?

    Danke schonmal

  4. #4
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Geht schon....

    GCC kann Cross-Compiliing, d.h. du kannst executables unter Linux für Windows erzeugen.

    Es gibt zwei Lösungen, die beide auf dem GCC basieren:

    1.) Cygwin:
    Cygwin bietet praktisch eine kompatibilitätsbibliothek beim kompilieren an, die deinen Unix-socket-code-api versteht und nach windows übersetzt
    Wenn nicht GPL -> zahlen, außerdem muss man library dazulinken -> geht dafür unix-only :-)

    2.) MinGW: Ein GCC mit windows-anpassungen und Win32-API Interface, aber ohne kompatibilitätsbibliothek...
    Geändert von Lin728 (19-08-2017 um 21:39 Uhr)

  5. #5
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    also auf dem jeweiligen system compilierte programme gehen nicht auf einem anderen system mit einem anderen OS?

    also selbst wenn ich den ganzen code auf win "umstelle", bringt es das nicht wenn ich den unter linux compile, er läuft dann net unter windows?
    Jup, so ist es. Was denkst du, warum wie auf Linuxforen.de immer so viele Fragen zu Wine(X), etc. haben
    du meinst doch sowas wie

    #ifdef blubb
    bla
    #endif
    Jup, es ist möglich per Prekompiler festzulegen, dass bestimmte Sachen für verschiedene Systeme definiert werden, etc.

    Cu
    André
    C und C++

  6. #6
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30

    Re: Geht schon....

    Original geschrieben von ceisserer
    Grüssi!

    GCC kann Cross-Compiliing, d.h. du kannst executables unter Linux für Windows erzeugen.
    Das ist aber richtig Ar**** zum Aufsetzten, bitte frage mich nicht wie das geht :-(

    Es gibt zwei Lösungen, die beide auf dem GCC basieren:

    1.) Cygwin:
    Cygwin bietet praktisch eine kompatibilitätsbibliothek beim kompilieren an, die deinen Unix-socket-code-api versteht udn diese windos beibringt.
    Wenn nicht GPL mussma zahlen, außerdem muss man library dazulinken -> geht dafür unix-only :-)

    2.) MinGW: Ein GCC mit windows-anpassungen und Win32-API Interface, aber ohne kompatibilitätsbibliothek...

    lg Clemens
    Hallo,

    sehe ich das richtig das beide Lösungen dadrauf basieren, das man den quellcode unter windows selber compilen muss mit den von dir angegebenen sachen? ( zb ersteres windows BSD sockets beibringt )

    wenn ja: so wird mir das nichts bringen, da ich nicht jedem zumuten kann ihm den quellcode zu geben, cygwin und nen GCC einzurichten und das dann selber zu compilieren

    was ich mit dem cygwin ncht versteh: dein satz macht mir nicht klar ob

    1. bei jedem windows client wo das programm draufsoll diese einrichtung drauf sein muss oder
    2. ob beim compilieren die BSD sockets in winapi sockets umgewandelt werden, sodass die dadraus resultierende binär datei dann für JEDEN win client verwendbar ist, auch solchen ohne cygwin. in dem fall müsste ich ja "nur" eine win-dose mit gcc cygwin einrichten mein source mit der maschine sharen und für win user den quelcode dort compilieren damit die progs jeder win user usen kann
    Geändert von Freekazonid (21-11-2003 um 20:54 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30
    Original geschrieben von Berufspenner
    Jup, so ist es. Was denkst du, warum wie auf Linuxforen.de immer so viele Fragen zu Wine(X), etc. haben
    najo dachte bei so kleinen programmen wäre das noch problemlos möglich das bei grossen progs die windows libs dlls dx und was weiss ich brauchen es probleme gibt oder halt gnu/linux progs die qt verwenden die für windows umzusetzen; das das nicht geht war mir klar, aber simple consolen programme dacht ich wäre unkompliziert wie man sich täuschen kann

    Jup, es ist möglich per Prekompiler festzulegen, dass bestimmte Sachen für verschiedene Systeme definiert werden, etc.
    hast du zufällig einen link/tut was auch immer dazu parat? wie gesagt habe ich sowas schonmal gelesen was auch garnicht allzu kompliziert aussah; durch ide ifdef sachen wurde gecheckt obs win oder gnu/linux war und dementsprechend die #define gesetzt welche später benutzt wurden. irgendwie sowas

  8. #8
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    Hi@all

    Hier wird diese Thematik bezüglich des Prekompilers mal besprochen => http://www.ulrich-vogel.de/programmi.../hinweise.html

    Cu
    André
    C und C++

  9. #9
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30
    Original geschrieben von Berufspenner
    Hi@all

    Hier wird diese Thematik bezüglich des Prekompilers mal besprochen => http://www.ulrich-vogel.de/programmi.../hinweise.html

    Cu
    André
    Danke für den Link ja so dachte ich mir das, aber bleiben alle Aufrufe wie socket, connect, bind, listen accept etc bestehen? also in dem link sieht das ja so aus

    zuerst kommt der include teil, das ist ja denke ich klar und ersetzt meine herkömlichen includes. dann aber der 2. teil, wird das dann im späteren code so aussehen was ich mir schlecht vorstellen kann:

    Code:
    #ifdef _WIN32
    WSADATA wsaData;
    if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0) {
        fprintf (stderr, "WSAStartup(): Kann Winsock nicht initialisieren.\n");
        exit (EXIT_FAILURE);
    }
    #endif
    
    // nu kommt mein programm wie es immer war, ni umgebaut bis auf entfernung der includes
    
    #ifdef _WIN32
    WSACleanup();
    #endif

  10. #10
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Hmm...

    Der Precompilier tut nix anderes, als zu sehen ob der Code z.B. unter Linux compiliert wird und wirft alle statements mit Win32 raus.

    Was du brauchst ist ein Crosscompilier, der unter Linux Windows-Programme erzeugen kann. GCC kann das, nur kenne ich leider keine Anleitung.
    Die Precompilier-Statements sind sowieso notwendig, wenn du nicht mit einer Cross-Platform-Bibliothek wie WxWindows arbeitest, sonst würde deine Linux-Anwendung für Win32 z.B. gar nicht kompilieren, weil die Win32-Libs keine BSD-Sockets können.

    Cygwin hat nur den Zweck, dass es praktisch eine Bibliothek hat, die Linux-Api uaf die darunterliegende Windows-API mappt. D.H. du links einmal die cygwin-bibliotheken statisch in dein Executable und dann läufts überall, das cygwin-zeugs ist dann in deinem executable drinnen.

    Cross-Compiling ist ein eher heikles Thema, ich habe es bisher nicht mit für mich vertretbaren Aufwand geschaft (man muss z.B. alle Libs dir man verwendet auch für das Zielsystem kompiliert haben), ich hatte die besten Erfahrungen mit Cygwin oder MinGW (weiß nicht mehr welcher von beiden genau) unter Wine.

    Viel Glück
    Geändert von Lin728 (19-08-2017 um 21:40 Uhr)

  11. #11
    Registrierter Benutzer
    Registriert seit
    13.05.2003
    Beiträge
    30
    moin,

    mh wenn das cygwin unter wine läuft und man damit binarys erstellen kann die dann auch unter wine laufen werde ich das mal probieren.

    habe mal was gesucht, finde allerdings immer nur installationsanleitungen und ähnliches wie man cygwin unter windows installiert um dort UNIX sachen wie bash X ssh zu nutzen etc; aber nirgends steht wie man nutzen kann um selbstgeschriebene linux programme mit cygwin so "linken" kann das sie dann unter jedem win laufen ( weil nach den anleitungen klingt es eher wieder so als müsste auf jedem rechner cygwin laufen )

    /e je mehr ich lese desto mehr frage ich mich ob cygwin das richtige ist. was ich grad in der cygwin faq gefunden hab

    Can I build a Cygwin program that does not require cygwin1.dll at runtime?

    No. If your program uses the Cygwin API, then your executable cannot run without cygwin1.dll.
    also ist eine mit cygwin erstellte binary NICHT überall lauffähig

    ich guck ma ob ich was über cross compiling finde
    Geändert von Freekazonid (22-11-2003 um 12:19 Uhr)

  12. #12
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Wenn das Programm genug einfach ist, dann lässt es sich unter Cygwin problemlos wie unter Linux übersetzen. Sobald Systemnahe Teile hinzukommen, müssen die für jede Plattform einzeln programmiert werden. Dank Cygwin sind grosse Teile abgedeckt (Memory Management, Sockets, diverse System calls etc.)

    Allerdings ist wie du gesehen hast, die cygwin.dll notwendig. Die kannst du aber einfach zu deinem Programm packen und im selben Verzeichnis ablegen.

    Schwieriger wirds bei grafischen Applikationen. Entweder du setzt unter Windows ein X-Server voraus, oder du verwendest ein portables GUI Toolkit wie wxwindows oder qt.

    Ich habe kürzlich testweise unsere Diplomarbeit unter Cygwin übersetzt. Das Konsolen-Programm liess sich ohne Probleme übersetzen (nur läuft es noch nicht...). Das verdanke ich autoconf/automake, welche eine Grosse Hilfe sind, wenn es um das portieren von Software auf verschiedene Unix-Systeme und Cygwin geht, da sie dir einen grossen Teil der Arbeit abnehmen. Übringens kompiliert und läuft das Programm auch unter MacOS X.

    Gruss, Andy

  13. #13
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Original geschrieben von Freekazonid
    also ist eine mit cygwin erstellte binary NICHT überall lauffähig
    Wie schon gesagt, musst du einfach die Lib mitliefern. Ist ja kein Problem - die ist auch nur knapp 1 MB gross.
    Mit MinGW gehts ohne die Lib, allerdings musst du dann afaik ein bisschen mehr Aufwand beim Portieren betreiben. Bei Cygwin gehts im Optimalfall mit nem simplen Neukompilieren.
    Zusätzlich musst du dann noch irgend ne lib auftreiben und unter MinGW oder Cygwin kompilieren, die Windows vernünftige Socket-Programmierung beibringt (bzw für Windows übersetzt) oder deinen Code anpassen.

    Um die Verwirrung (vielleicht) noch zu komplettieren: Cygwin enthält MinGW.
    MinGW ist sehr klein (der Name sagts) - Cygwin enthält dagegen noch sehr viele auf Windows angepasste Bibliotheken und Programme, die du alle installieren kannst.

    ich guck ma ob ich was über cross compiling finde
    dazu hab ich kürzlich mal was gepostet. -> Suchfunktion

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •