Kadaj Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Grüß euch, ich habe folgendes Anliegen: Ich hab mir, um unter debian C programmieren zu können, einige Pakete runtergeladen, die Bibliotheken und unter anderem auch den gcc-Compiler enthalten. Nur fehlen, nachdem ich wirklich schon alle Bibliotheken, die mit dem gcc zu tun haben, immernoch Bibliotheken, beispielsweise <sys/socket.h> oder <unistd.h>. Außerdem hatte ich zum testen schnell einen kleinen Taschenrechner geschrieben und habe für die Eingaben int-Variablen definiert. Bei der ersten Eingabe einer Zahl (z.b. 11) bekomme ich den Fehler"Speicherzugriffsfehler". Ich weiß nicht ob das damit zu tun hat ob noch einige Bibliotheken fehlen, denn bei dem Taschenrechner funktioniert das compelieren ja auch, nur an der Ausführung hapert es noch. Weiß jemand von euch welches Paket/Pakete ich installieren muss um wirklich alle Bibliotheken zu erhalten, die ich für die C-Programmierung benötige (mit dem gcc) oder was es mit dem Speicherzugriffsfehler auf sich hat? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Sofern die Dev-Pakete installiert sind, was daraus zu schließen ist, wenn sich der Code kompilieren lässt, würde ich den Fehler beim Speicherzugriff auf einen Fehler im Code zurück führen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kadaj Geschrieben 7. September 2010 Autor Teilen Geschrieben 7. September 2010 (bearbeitet) Naja, das Problem ist, dass nur einige Bibliotheken installiert sind. Der code lässt sich nur daher compelieren, weil ich im Taschenrechner auch nur die stdio.h eingebunden habe, aber bei einem umfangreicheren code fehlen mir zum Beispiel sys/socket.h und unistd.h. Die Frage ist also: "Welches Paket muss ich installieren um alle Bibliotheken zu erhalten?" Bearbeitet 7. September 2010 von Kadaj Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 socket.h und unistd.h sind keine Bibliotheken.Dass sich ein Code kompilieren lässt, heißt nicht, dass er keine Laufzeitfehler erzeugt, oder gar fehlerfrei ist.Der Grund für deine Speicherzugriffsfehler ist nicht "fehlende Bibliotheken", sondern Fehler im Code. Die Frage ist also: "Welches Paket muss ich installieren um alle Bibliotheken zu erhalten?"Es gibt kein Paket, das alle Bibliotheken enthält. Die genannten Dateien befinden sich wohl in libc6-dev. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kadaj Geschrieben 7. September 2010 Autor Teilen Geschrieben 7. September 2010 Stimmt, das ging fälschlicherweise daraus hervor. libc6-dev hab ich bereits installiert, geht trotzdem nicht: root@thanatos:/home/kadaj/programmierung# gcc -o portscan portscan.c portscan.c:3:21: Fehler: arpa/inet: Datei oder Verzeichnis nicht gefunden portscan.c:4:18: Fehler: unistd: Datei oder Verzeichnis nicht gefunden portscan.c: In Funktion »main«: portscan.c:10: Fehler: Speichergröße von »adressinfo« ist unbekannt portscan.c:17: Fehler: »SOCKET_STREAM« nicht deklariert (erste Benutzung in dieser Funktion) portscan.c:17: Fehler: (Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt portscan.c:17: Fehler: für jede Funktion in der er auftritt.) portscan.c:17: Fehler: »o« nicht deklariert (erste Benutzung in dieser Funktion) root@thanatos:/home/kadaj/programmierung# Der code stimmt auf jeden Fall, funktioniert auf meinem Ausbildungs-PC auch. Trotzdem scheinen hier noch wichtige Bibliotheken zu fehlen und ich weiß leider nicht welche und wo ich die her bekomme. Hab auch schon einiges gegoogelt, aber fail. Jemand noch eine Idee? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 8. September 2010 Teilen Geschrieben 8. September 2010 Auch wenn du meinst, dass dein Code richtig ist, zeig ihn bitte trotzdem. Dann geht die Diagnose viel schneller, und wir müssen hier nicht herumraten, ob nicht vielleicht doch ein Fehler im Code steckt. portscan.c:3:21: Fehler: arpa/inet: Datei oder Verzeichnis nicht gefunden portscan.c:4:18: Fehler: unistd: Datei oder Verzeichnis nicht gefundenFehlt da vielleicht das ".h" in den Include-Direktiven? Der code stimmt auf jeden Fall, funktioniert auf meinem Ausbildungs-PC auch.Das heißt nicht viel. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 8. September 2010 Teilen Geschrieben 8. September 2010 Wenn Du Pakete suchen willst, bzw. die Inhalte der Pakete nach XYZ durchsuchen willst, empfehle ich Dir Debian -- Packages (z.b. 11) bekomme ich den Fehler"Speicherzugriffsfehler" Sicher, daß Du da nicht zufälligerweise in Speicherbereiche schreibst, die nicht für Dich gedacht sind? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kadaj Geschrieben 13. September 2010 Autor Teilen Geschrieben 13. September 2010 Auch wenn du meinst, dass dein Code richtig ist, zeig ihn bitte trotzdem. Dann geht die Diagnose viel schneller, und wir müssen hier nicht herumraten, ob nicht vielleicht doch ein Fehler im Code steckt. Da ist wirklich kein Fehler im code, ich hab die Datei doch von meinem Ausbildungs-PC, auf dem ich das Programm geschrieben habe, kopiert. Wenn Du Pakete suchen willst, bzw. die Inhalte der Pakete nach XYZ durchsuchen willst, empfehle ich Dir Debian -- Packages Ich hab mal nach "arpa/inet" und "sys/socket" gesucht, aber leider nichts gefunden. Dennoch ist die Seite sehr interessant, danke! Das Problem mit dem Speicherzugriffsfehler hat sich erledigt, ich hatte in der Eile an einer Stelle vergessen ein "&" vor die Variable zu setzen... passiert Wenn ich eine Lösung für das Problem mit den Bibliotheken gefunden haben sollte, melde ich mich nochmal. Mein letzter versuch war das Paket "build-essential" aber trotzdem kein Erfolg beim compelieren von "portscan.c" (siehe oben) Vielleicht hat ja noch jemand ein Ass im Ärmel :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. September 2010 Teilen Geschrieben 13. September 2010 Da ist wirklich kein Fehler im code, ich hab die Datei doch von meinem Ausbildungs-PC, auf dem ich das Programm geschrieben habe, kopiert. Warum sträubst du dich so? Dass der Code auf deinem Ausbildungs-PC funktioniert, heißt nicht, dass er richtig ist. Zeig den Code, oder zumindest ein Minimalbeispiel, das den Fehler reproduziert. Du brauchst auch keine Angst zu haben, dass jemand über deinen Portscanner schimpft oder lacht. Ich hab mal nach "arpa/inet" und "sys/socket" gesucht, aber leider nichts gefunden. Dennoch ist die Seite sehr interessant, danke!Die Dateien heißen ja auch inet.h und socket.h. Und damit findet man das hier: Debian -- Package Contents Search Results -- arpa/inet.h Debian -- Package Contents Search Results -- sys/socket.h libc6-dev, hast du schon -> Anderes Problem. Vielleicht hat ja noch jemand ein Ass im Ärmel :confused:Es gibt dutzende mögliche Ursachen für dein Problem. Aber es liegt zu 95% an deinem Code. Und ich bin nicht bereit, hier eine mögliche komplexe Problemlösung nach der anderen durchzukauen, bevor ich nicht die wahrscheinlichste geprüft habe. Zeig den Code, dann können wir weiterhelfen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kadaj Geschrieben 13. September 2010 Autor Teilen Geschrieben 13. September 2010 Was? Nein, hab ich auch nicht Ist ohnehin nur ein code, den ich aus einem Buch habe: #include <sys/socket.h> #include <stdio.h> #include <arpa/inet> #include <unistd> int main() { int socket_nummer; int laenge; struct sockaddr_in adressinfo; int ergebnis; unsigned short int portnummer; char ip_adresse[] = "127.0.0.1"; for(portnummer = 0;portnummer<65535;portnummer++) { socket_nummer = socket(AF_INET, SOCKET_STREAM, o); adressinfo.sin_family = AF_INET; inet_pton(AF_INET, ip_adresse,&adressinfo.sin_addr.s_addr); adressinfo.sin_port = htons(portnummer); laenge = sizeof(adressinfo); ergebnis = connect(socket_nummer,(struct sockaddr *)&adressinfo, laenge); if(ergebnis == 0) { printf("\n Verbindungsaufbau erfolgreich an"); printf(" IP %s - Port %d",ip_adresse,portnummer); }close(socket_nummer); } return(0); } Dass ich bei der Suche den vollständigen Namen angeben muss, war mir nicht klar; ich hätte gedacht ein Teil reicht aus. Kann das denn sein, dass ein code, der unter suse läuft, auf debian nicht läuft, obwohl ich den gleichen Compiler verwende? Das ist mir irgendwie schleierhaft. Ich hatte mal schnell über die Pakete geschaut und einige installiert, zunächst ohne Erfolg, wenn du nicht wirklich was am code findest, werd ich morgen nochmal alle Pakete installieren. Danke für die Hilfe, gn8 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. September 2010 Teilen Geschrieben 13. September 2010 Ich habe die Fehler markiert, ohne Anspruch auf Vollständigkeit. Aber immerhin sollte sich das jetzt kompilieren lassen. #include <sys/socket.h> #include <stdio.h> #include <arpa/inet[COLOR="#ff0000"][B].h[/B][/COLOR]> #include <unistd[B][COLOR="Red"].h[/COLOR][/B]> int main() { int socket_nummer; int laenge; struct sockaddr_in adressinfo; int ergebnis; unsigned short int portnummer; char ip_adresse[] = "127.0.0.1"; for(portnummer = 0;portnummer<65535;portnummer++) { socket_nummer = socket(AF_INET, [B][COLOR="#ff0000"]SOCK_STREAM[/COLOR][/B], [B][COLOR="#ff0000"]0[/COLOR][/B]); adressinfo.sin_family = AF_INET; inet_pton(AF_INET, ip_adresse,&adressinfo.sin_addr.s_addr); adressinfo.sin_port = htons(portnummer); laenge = sizeof(adressinfo); ergebnis = connect(socket_nummer,(struct sockaddr *)&adressinfo, laenge); if(ergebnis == 0) { printf("\n Verbindungsaufbau erfolgreich an"); printf(" IP %s - Port %d",ip_adresse,portnummer); }close(socket_nummer); } return(0); } [/CODE] Kann das denn sein, dass ein code, der unter suse läuft, auf debian nicht läuft, obwohl ich den gleichen Compiler verwende?Dein Code sollte eigentlich nirgendwo laufen. Vielleicht ist beim Kopieren (Abschreiben?) etwas schiefgegangen, vielleicht hast du auch eine alte Version kopiert. Das sind jedenfalls typische Abschreibfehler. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 13. September 2010 Teilen Geschrieben 13. September 2010 (bearbeitet) Kann das denn sein, dass ein code, der unter suse läuft, auf debian nicht läuft, obwohl ich den gleichen Compiler verwende? Nein, sofern Du nicht irgendwelche distributionsspezifischen Sachen verwendest. Du nutzt hier Standard Komponenten. Aber wie schon gesagt, die Includes sind nicht korrekt es muss "inet.h" heißen. Weiterhin ist Deine Variable "o" auch nicht deklariert. Es sind noch mehr Fehler im Code, aber die solltest Du, wenn Du Dir die Meldungen des gcc anschaust auch selbst beheben können. @Klotzkopp: Du warst schneller und hast ja alles korrigiert..... Bearbeitet 13. September 2010 von flashpixx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kadaj Geschrieben 14. September 2010 Autor Teilen Geschrieben 14. September 2010 Ich fass es nicht, es liegt wirklich am code :upps das sind genau die Fehler, die ich vor dem ersten compilieren hatte, da hab ich wohl die falsche Datei kopiert, sorry :/ Das "O" ist aber eine 0 (Null), an der Stelle ist das schon richtig, wobei man sie aber auch weglassen könnte. Ich probier dann gleich mal aus ob sich der code compilieren lässt, nachdem ich ihn geändert habe. Vielen Dank für eure Hilfe, das nächste mal poste ich den code sofort Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.