BSD-Sockets für Windows?



  • Sag mal NES-Spieler,

    du bist hier seit 2006 angemeldet und hast nicht den blassen Schimmer wie man Programme kompiliert??? Dazu muss ja nicht mal programmieren können!!! Ich denke das die IT nicht das richtige Gebiet für dich ist....ehrlich pack die Kiste wieder ein, mach ein Aufkleber rauf "Ich raff es nicht" und schicke die Technologie wieder zurück an den Hersteller und fang mit Angeln an oder Stricken oder irgendwas wo du nach Jahren auch was lernen wirst.



  • NES-Spieler schrieb:

    Janjan schrieb:

    Verstehst du es ernsthaft nicht? Dein Code benutzt Kram, der nicht Bestandteil der Berkley-Socket-Schnittstelle ist. Und genau der Kram macht Probleme.

    Und diesen Quatsch gibt's nicht für Windows? Ich meine, wenn man sich mal die Definition ansieht:

    The functions asprintf() and vasprintf() are analogues of sprintf() and vsprintf(), except that they allocate a string large enough to hold the output including the terminating null byte, and return a pointer to it via the first parameter. This pointer should be passed to free(3) to release the allocated storage when it is no longer needed.

    Das klingt nicht so, als müßten diese Funktionen zwangsläufig nur unter Linux verfügbar sein. Also wieso gibt's diesen Mist nicht für Windows? Wer denkt sich sowas aus?

    Dafür wurde ja Cygwin gemacht und scheinbar läuft dein Programm ja mit Cygwin, also was hast du denn für ein Problem?

    Also:
    1. Es handelt sich um ein Linux Programm. Linux Programme können nicht einfach unter Windows kompiliert werden.
    2. Um Linux Programme trotzdem unter Windows kompilieren zu können gibt es Cygwin das du ja schon kennst.
    3. Willst du Cygwin nicht verwenden, musst du das Programm auf Windows portieren was Änderungen im Code bedeutet.

    Das ist doch echt nicht so schwer zu kapieren, oder? Was gibt es denn da noch gross zu diskutiere?



  • kein-Spieler schrieb:

    du bist hier seit 2006 angemeldet und hast nicht den blassen Schimmer wie man Programme kompiliert???

    Was hat meine Frage, ob es diese oder jene Bibliothek auch für Windows gibt, mit der Fähigkeit, ein Programm zu kompilieren, zu tun?

    Tanren schrieb:

    Dafür wurde ja Cygwin gemacht und scheinbar läuft dein Programm ja mit Cygwin, also was hast du denn für ein Problem?

    Ich wollte einfach nur wissen, ob es dafür auch eine Standalone-Bibliothek gibt, die man mit MinGW verwenden kann.

    Tanren schrieb:

    1. Es handelt sich um ein Linux Programm. Linux Programme können nicht einfach unter Windows kompiliert werden.

    Das ist mir auch klar. Aber die Funktionen, die es hier unter Windows nicht gibt, heißen ja nicht GetLowLevelUnixKernelData, sondern sie heißen unter anderem vasprintf. Und auch wenn es diese Funktion in der Praxis unter Windows nicht geben mag, heißt das nicht, daß sie prinzipiell nicht unter Windows implementiert werden kann. Und meine Frage war nun, ob es so eine Implementierung tatsächlich gibt. conio.h ist auch eine Windows-spezifische Datei. Aber trotzdem könnte ja jemand diese Datei in Linux nachbauen und in den Funktionsdefinitionen dann eben entsprechende Linuxfunktionen benutzen. Würde also ein Linuxbenutzer fragen, wie er ein Programm, das die conio.h einbindet, in Linux kompilieren kann, könnte man ihm sagen: "conio.h ist eine spezielle Datei für Windows. Leider ist mir nicht bekannt, daß jemand diese Datei für Linux nachgebaut hat. Du müßtest die Funktionsaufrufe also durch analoge Funktionen aus Linux ersetzen oder Dich selbst daranmachen, eine conio.h für Linux zu entwickeln und dann dagegenlinken. Aber eine fertige Linuximplementierung von conio.h ist mir nicht bekannt, obwohl es prinzipiell wahrscheinlich machbar wäre." Es gäbe keinen Grund, ihm an den Kopf zu knallen: "Mann, das is ne Windows-Datei, Du b00n!!! Weißt Du, was Windows ist? Du kannst Windows-Programme nicht unter Linux kompilieren, geht das nicht in Deinen Schädel?"

    Tanren schrieb:

    Das ist doch echt nicht so schwer zu kapieren, oder?

    Nein, ist es nicht. Aber offenbar scheint es für Euch etwas schwer zu sein, zu kapieren, daß ich lediglich wissen wollte, ob es für die entsprechenden Dateien eine Windows-Implementierung gibt (auch wenn die Dateien ursprünglich nur unter Linux verfügbar sind) oder ob das noch keiner in Angriff genommen hat. Und wenn zweiteres der Fall ist, wollte ich wissen, wie Cygwin das dann gemacht hat, wo dieses Programm ja meines Wissens nach eine Windows-Anwendung ist, aber keine echte Emulation von Linux, so daß alle Funktionen, die Cygwin beherrscht, ja irgendwann mal unter Windows kompiliert worden sein müssen. (Oder kann Cygwin etwa die für Linux kompilierten Binaries lesen?) Und wenn das gemacht wurde, dann ist der Gedanke, daß es die BSD-Sockets und dieses vasprintf etc. vielleicht auch als Standalone-Produkt für die Verwendung unter MinGW oder Visual Studio gibt, nicht mehr so weit hergeholt, oder?



  • Gibt es nicht. Noob.



  • Wenn das so ist, würde mich interessieren: Wie wurde die Datei "cygwin1.dll" kompiliert?



  • Mit einem Kompiler natürlich.

    Wenn dich das so brennent interessiert, lad dir Quellcode runter und schau nach.



  • cygwin.dll wrappt unter anderem die Linux POSIX API, hat also deine gesuchten Funktionalitäten irgendwo drinne. Ich glaube kaum das sich hier einer die Mühe macht und nachschaut wie dort deine printf funktion auf die winapi gewrappt ist.
    Guckt dir doch die Linux printfs und Winapi printfs an und schau ob man da einen ganz kleinen Wrapper schreiben kann. Ansonster frag die Entwickler von cygwin. Wie soll denn hier einer Wissen ob das schon mal einer gewrappt hat????



  • NES-Spieler schrieb:

    Wenn das so ist, würde mich interessieren: Wie wurde die Datei "cygwin1.dll" kompiliert?

    Und wenn du auch nur ein kleines bischen vom Programmieren verstehen würdest, dann wüsstest du die Antwort bereits.



  • Ich schätze so, aber nich weiterverraten 😃

    gcc -c cygwin.c
    gcc -shared -o cygwin.dll cygwin.o
    


  • Mann, ey, Ihr seid aber auch schwer von Begriff: Als ich fragte, wie cygwin1.dll kompiliert wurde, meinte ich nicht, daß ich eine genaue Beschreibung haben will, sondern ich wollte bloß wissen: Besteht die Funktionalität darin, daß die Linux-Binaries gelesen und konvertiert werden können, oder wurden die Linuxfunktionen mit Windows nachgebaut?
    Um mal ein analoges Vergleichsbeispiel zu benutzen, das meinem Benutzernamen entspricht: Ist Cygwin eher wie ein NES-Emulator, der von den Spielekassetten kopierte Binärdateien liest und somit ein exaktes Abbild des entsprechenden Spiels auf dem PC liefert? Oder ist Cygwin eher zu vergleichen mit einem selbstgemachten Remake von "Super Mario Bros.", wo jemand das Originalspiel studiert hat, dann die Grafiken als Bitmap nachgezeichnet, die Sounds aufgenommen und dann die gesamte Spielephysik in einem DirectX-Programm nachgebaut hat?
    Worauf ich nämlich hinauswill (und die ganze Zeit hinauswollte, aber das checkt Ihr ja nicht): Wenn Cygwin eher mit dem "Mario"-Remake zu vergleichen ist, statt mit der Emulation, dann bedeutet das, daß es native Windows-Implementierungen der Linuxfunktionen gibt, die man auch außerhalb von Cygwin verwenden könnte. Und das war ja der Anlaß meines ersten Posts in diesem Thread. Wenn's aber nur eine Emulation ist, hättet Ihr gleich am Anfang sagen können: "Die Funktionen laufen nicht unter Windows. Und Cygwin ist zwar ein Windows-Programm, aber da wurden sie nicht nachprogrammiert, sondern Cygwin benutzt die originalen Linux-Binaries und emuliert diese."



  • Warum liest du nicht einmal nach, was Cygwin genau ist: http://www.cygwin.com/ 🙄

    Dann wüsstest du, dass es sich bei Cygwin nicht um einen Emulator handelt, sondern um genau das, was du schon die ganze Zeit suchst. Einfach eine Library die POSIX für Windows wrapt.

    A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.

    # Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.

    Wenn du nun immer noch kein Cygwin willst, dann kannst du dir ja MKS für ein paar k€ kaufen 🙄.



  • Warum einfach wenns aus kompliziert geht, um es in deiner Sprache auszudrücken:

    Die cygwin.dll bildet die Linuxfunktionen nach, so dass sie auch von Windowsprogrammen genutzt werden können.
    Du kannst damit also Linuxprogamme unter Windows kompilieren und dann zusammen mit der cygwin.dll nutzen.



  • iknowit schrieb:

    Warum liest du nicht einmal nach, was Cygwin genau ist: http://www.cygwin.com/ 🙄

    Dann wüsstest du, dass es sich bei Cygwin nicht um einen Emulator handelt, sondern um genau das, was du schon die ganze Zeit suchst. Einfach eine Library die POSIX für Windows wrapt.

    Und meine Frage war nun, ob es diese Wrapper auch ohne Cygwin gibt. Daß ich mir also die BSD-Sockets irgendwo herhole und mit meinem normalen MinGW dagegenlinke. Denn wenn's keine Emulation ist, müßten die ja auch ohne Cygwin neukompilierbar sein, da in dem Fall ja nur ganz normaler Windows-Code dahintersteckt.



  • Omg jetzt Recyclin wir den Thread.



  • n00b-Buster schrieb:

    Warum einfach wenns aus kompliziert geht, um es in deiner Sprache auszudrücken:

    Die cygwin.dll bildet die Linuxfunktionen nach, so dass sie auch von Windowsprogrammen genutzt werden können.
    Du kannst damit also Linuxprogamme unter Windows kompilieren und dann zusammen mit der cygwin.dll nutzen.

    Aber wie bildet sie sie nach? Ganz normal auf Codeebene im Stil von:

    int LinuxNotificationBox(std::string message)
    {
        return MessageBoxA(NULL, message.c_str(), "Message", MB_OK);
    }
    

    ?
    Wenn das nämlich der Fall ist, wäre es möglich, die Quellcodes rauszunehmen und als normale Lib für Compiler zu verwenden.



  • Keine Ahnung ob ausserhalb des Cygwin-Projektes noch jemand Teile der POSIX API wrapt. Dir bleiben ja nur zwei Wege:

    1. Du kompiliert gegen Cygwin mit all den Abhängigkeiten die da auftreten
    2. Du portierst die Anwendung nach Windows

    Kann Beides ein ganz schöner Aufwand sein und da du nicht die große Leuchte im Bezug auf C++ etc. zu seinen scheint denke ich mal dass du mit beidem extremsst überfordert bist.



  • Ja, so ungefair machen die das.



  • n00b-Buster schrieb:

    Ja, so ungefair machen die das.

    Wenn die das so machen, dann hatte ich mit meiner Vermutung die ganze Zeit recht. Und dann ist es völlig ungerechtfertigt, zu sagen: "Das Programm benutzt vasprintf, das kannst Du also nicht unter Windows kompilieren, weil das eine Linux-Funktion ist", denn offenbar gibt es ja dann irgednwo einen Quellcode, in dem folgendes drinsteht:

    int vasprintf(char **strp, const char *fmt, va_list ap)
    {
        // Irgendwelches Windows-Zeug
    }
    

    Wenn aber einer sowas gemacht hat, ist es auch möglich, daß zwei Leute das gemacht haben und einer von denen das nicht in eine DLL linkt und mit einem Programm ausliefert, sondern als Lib-Dateien und als Quellcode zur Verfügung stellt. Und unter diesen Gesichtspunkten muß ich mich echt fragen, was an meiner Anfrage, ob man diese Implementierung irgendwo für Windows herbekommt, so noobig sein soll.



  • NES-Spieler schrieb:

    iknowit schrieb:

    Warum liest du nicht einmal nach, was Cygwin genau ist: http://www.cygwin.com/ 🙄

    Dann wüsstest du, dass es sich bei Cygwin nicht um einen Emulator handelt, sondern um genau das, was du schon die ganze Zeit suchst. Einfach eine Library die POSIX für Windows wrapt.

    Und meine Frage war nun, ob es diese Wrapper auch ohne Cygwin gibt. Daß ich mir also die BSD-Sockets irgendwo herhole und mit meinem normalen MinGW dagegenlinke. Denn wenn's keine Emulation ist, müßten die ja auch ohne Cygwin neukompilierbar sein, da in dem Fall ja nur ganz normaler Windows-Code dahintersteckt.

    Die Cygwin-DLL ist der Wrapper. Das zweite L in DLL steht für Library! Wie auf der Homepage steht besteht Cygwin aus zwei Teilen: Dem Wrapper (der DLL) und Programmen die bereits mit diesem Wrapper kompiliert wurden (die brauchst du natürlich nicht).

    hier kannst du dir den Code anschauen http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/?cvsroot=src 🙄



  • Wenn du ein Linux Programm versuchst gegen die Windows API zu compilieren, ist es völlig rechtfertig, dass wir dir sagen, das es nicht geht.

    Hier ist der Quellcode. Die Lib besteht aus 6024 Dateien. Viel Spaß.
    http://cygwin.com/snapshots/cygwin-src-20100518.tar.bz2


Anmelden zum Antworten