Связывание WSAAsyncSelect с Mingw - неопределенная ссылка - PullRequest
0 голосов
/ 03 декабря 2011

Я портирую VoIP-приложение, которое я написал в Borland, на Mingw, так что я знаю, что код работает.Я использую командную строку gcc -lws2_32 -mwindows voipapp.c -o voipapp и получаю сообщение об ошибке

неопределенная ссылка на 'WSAAsyncSelect @ 16' ".

Кажется, что он правильно расположен libws2_32.a поскольку не появляются сообщения об ошибках, сообщающие мне об обратном. Есть идеи, что может быть не так? У меня установлена ​​одна из последних версий mingw. Спасибо!

Мой код выглядит следующим образом:

#include <windows.h>
#include <winsock2.h>
#define __MT__
#include <mmreg.h>
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <process.h>

#define WM_SOCKETREAD (WM_USER + 1)

SOCKET ListenSocket;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
           LPSTR szCmdLine, int iCmdShow) {

    static char szAppName[] = "voip";
    HWND        hwnd;
    MSG         msg;
    WNDCLASSEX  wndclass;

    wndclass.cbSize         = sizeof(wndclass);
    wndclass.style          = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc    = WndProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = hInstance;
    wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground  = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wndclass.lpszClassName  = szAppName;
    wndclass.lpszMenuName   = NULL;

    RegisterClassEx(&wndclass);

    hwnd = CreateWindow(szAppName, "VOIP prototype",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, CW_USEDEFAULT,
            NULL, NULL, hInstance, NULL);

    ShowWindow(hwnd, iCmdShow);
    UpdateWindow(hwnd);


    WSAAsyncSelect(ListenSocket, hwnd, WM_SOCKETREAD, FD_READ|FD_CLOSE);


    while ( GetMessage(&msg, NULL, 0, 0) ) {
    TranslateMessage(&msg);
    DispatchMessage(&msg); 
        } 

    return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {

    return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

1 Ответ

1 голос
/ 14 марта 2012

Вы должны указать правильный порядок связывания.

Попытка:

gcc voipapp.c -o voipapp -mwindows -lws2_32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...