Zum Inhalt springen

Bibliotheken für C unter debian


Kadaj

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Kadaj
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 gefunden

Fehlt 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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ist wirklich kein Fehler im code, ich hab die Datei doch von meinem Ausbildungs-PC, auf dem ich das Programm geschrieben habe, kopiert.
:rolleyes:

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...