Forum: PC-Programmierung mingw32 und socket


von Lukas Tröllinger (Gast)


Lesenswert?

hi!

ich würde gerne mit dem mingw32 sockets in c oder c++ programmieren.
jedoch bekomme ich immer den selben linker error wenn ich simple
beispieldateien kompiliere:

ll: undefined reference to 'socket@12'

kann mir jemand bei diesem problem helfen. ich würde gerne
applikationen für win xp schreiben.

vielen dank

von A.K. (Gast)


Lesenswert?

-lwsock32

von Lukas Tröllinger (Gast)


Lesenswert?

hi

-lwsock32 funktioniert nicht. ich werde vielleicht ein bisschen
konkreter mit meinem problem:

#include <stdio.h>
#include <windows.h>
#include <winsock.h>

int main(int argc, char *argv[])
{
  int sock_id=0;

  sock_id=socket(AF_INET, SOCK_STREAM, 0);

  printf("Nur zum Testen");

  return 0;
}

dieser code steht in einem c file. wenn ich die datei kompilieren lasse
mit mingw32-gcc.exe bekomme ich folgende meldung:

"ll: undefined reference to socket@12"

habe ich vielleicht die falschen header dateien oder gibt es da noch
andere -ls die ich berücksichtigen sollte.

luki

von Wolfram (Gast)


Lesenswert?

der Linker sagt dir das er das Symbol socket@12 nicht finden kann.
Vielleicht hast du vergessen ihm die entsprechende Library anzugeben?

von Christian H. (armand)


Lesenswert?

hast Du die header winsock.h auch eingebunden, da die socket() methode
kein #define ist, ist sie nicht global.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Würde das Problem an einer nicht eingebundenen Headerdatei liegen, wäre
die Fehlermeldung eine andere.

Die Fehlermeldung aber ist eine des Linkers und besagt, daß dieser die
Funktion in keiner der verwendeten Libraries finden kann.

Möglicherweise liegt das Problem darin, daß hier eine zur verwendeten
Library inkompatible Aufrufkonvention verwendet wird - das dekorierte
Symbol socket@12 lässt erkennen, daß nicht die
C-Standard-Aufrufkonvention verwendet wird, dann nämlich hieße das
Symbol _socket.

(So jedenfalls sieht das bei MS-C-Compilern aus).

Existiert denn im LIB-Verzeichnis des Compilers überhaupt eine
Socket-Library?

von Christian H. (armand)


Lesenswert?

Das stimmt doch gar nicht. Es kommt auf den Compiler an. Mein Compiler
für das XPS meldet bringt genau diese Meldung wenn ich eine includiert
header aus dem projekt ausbinde. Ich kann auch noch viele beispiele
nennen wo compiler veschiedenste meldungen bringen für gleiche probleme

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das halte ich für ein Missverständnis.

Würde dem Compiler die Deklaration der Funktion "socket" fehlen,
würde die Fehlermeldung entsprechendes aussagen.

Die hier zitierte Fehlermeldung ist aber eindeutig eine Fehlermeldung
des Linkers, nicht des Compilers.

von Christian H. (armand)


Lesenswert?

woran siehst Du das? Ich lern immer gerne neu dazu:D

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das entnehme ich dem Präfix "ll" und der Tatsache, daß ein dekorierter
Name (eben socket@12) ausgegeben werden.

von Christian H. (armand)


Lesenswert?

okay danke, ll hab ich für 11 als zeilenangabe gehalten

von Lukas Tröllinger (Gast)


Angehängte Dateien:

Lesenswert?

hi

also schön langsam glaub ich, dass man mit dem mingw32 gar keine
sockets programmieren kann. als anhang habe seht ihr den compiler
output. vielleicht hilfts. normalerweise verwende ich die code::blocks
ide. aber bei der sieht mans nicht so schön. das programm ist das
gleiche geblieben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dein Screenshot zeigt, daß Du offensichtlich keinen der Dir hier
gegebenen Ratschläge auch nur gelesen zu haben scheinst - wo bitte ist
in Deiner Kommandozeile des gcc-Aufrufs der Hinweis, daß mit der
Library zu linken ist, die die Funktion socket enthält?


Desweiteren kann man den Inhalt von Konsolenfenstern auch als TEXT in
die Zwischenablage kopieren ... da ist kein Screenshot für
erforderlich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.