[WinSocket] Errore inizializzazione

di Paolovox il
6 risposte
Devo consegnare per novembre un sistema di controllo periodico delle modifiche effettuate al file system e di notifica
a client registrati delle modifiche stesse in C, portabile sia su Win che Unix.
I problemi più grandi sono su Win dato che non ci ho mai programmato in C.

Questa è la fase di inizializzazione di una socket:

#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib") //dice al linked di utilizzare la libreria ws2_32.lib

int create_win_socket()
{
	WSADATA wsa;

	printf("Inizializzazione...");

	    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
	    {
	        printf("Failed. Error Code : %d",WSAGetLastError());
	        return 1;
	    }

	printf("Inizializzata.");

	return 0;
}
Il mio problema è che non mi linka la libreria con la dichiarazione #pragma comment.
Per compilare sto utilizzando MinGW. Posso linkare la libreria in qualche altro modo?

Grazie e buona giornata.

6 Risposte

  • Quella pragma funziona in ambiente Visual C...

    Con quale strumento di sviluppo lavori?
  • Eclipse. Ho utilizzato il caricamento dinamico di una funzione di una dll. E' funzionante ma di certo non posso farlo per tutte le funzioni che mi serviranno. Devo includerla definitivamente.
    
    typedef int (*MyFunc) (WORD w, LPWSADATA l);
    
    	MyFunc func;
    	HMODULE libHandle;
    
    	libHandle = LoadLibrary("ws2_32.dll");
    
    	if(libHandle == NULL) printf("Errore caricamento libreria");
    
    	func = (MyFunc)GetProcAddress( libHandle, "WSAStartup");
    
    	if(func != NULL) func(MAKEWORD(2,2),&wsa);
    	else printf("ERRORE\n");
    
    PS: è un progettino universitario.
  • Francemente mi sembri davvero fuori strada, per un programma portabile
  • Ho deciso che come strategia implementativa utilizzerò delle funzioni wrapper che conterranno l'implementazione sia Unix che Windows in base all'OS esegue il codice giusto. Consigli in merito? E' troppo ridondante?

    Ancora sto in alto mare e mi servirebbe solo come linkare questa libreria per utilizzare le socket in windows, altrimenti non vado avanti.
    Potrei anche linkarla durante la compilazione.
  • Si. Counque risolvo usando il buon Emacs e linkando la libreria in fase di compilazione:
    
    gcc -c WinSocket.c -o WinSocket -lws2_32
    
    Un altro dubbio. Per la compilazione su Unix posso benissimo utilizzare il Makefile, mentre su Windows utilizzerò uno script batch?
Devi accedere o registrarti per scrivere nel forum
6 risposte