C Программирование сокетов в windows - winsock2.h связывание библиотек? - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь создать некоторый код сокета Windows, используя C. Я начал со следующего базового кода для инициализации WinSock:

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

int main(int argc, char *argv[])
{
    WSADATA wsa;
    SOCKET s;

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

    printf("Initialised.\n");
};

Когда я запускаю код, я получаю такие ошибки, как:

undefined reference to '__imp_WSAStartup'

Быстрый Google предполагает, что это связано с необходимостью ссылки на библиотеку - ws2_32?

Я использовал Cygwin, но, видимо, это пытается имитироватьсреда POSIX в Windows и, следовательно, MinGW гораздо больше подходит в этом случае. Поэтому я установил это и обновил настройки в VSCode, чтобы использовать его.

Теперь моя проблема в том, что я не уверен, как связать требуемую библиотеку. Я делаю это в моей программе, добавляя код? Я делаю это в каком-то отдельном терминале?

Это все ново для меня.

1 Ответ

0 голосов
/ 16 октября 2019

Использование Cygwin в качестве среды для кода не рекомендуется. ( См. За и против использования Cygwin .) Выберите одну среду или другую. т. е. запустить GCC в Windows или Linux, но не в обоих. Code :: Blocks поставляется в комплекте с GCC и имеет версии, которые можно использовать в Windows или Linux.

И да, сообщение об ошибке undefined reference to указывает на то, что, хотя заголовочный файл есть, библиотеки, на которую он ссылается, нет. Это должно быть связано, используя Ws2_32.lib.

При использовании, например, IDE Code :: Blocks, инструкция для связывания библиотеки находится здесь .

Или из командной строки, используя GCC:

Например, если у меня есть библиотека с именем libmine.so в / home / newhall / lib /, тогда я бывыполните следующие действия, чтобы связать его с моей программой:

   $ gcc -o myprog myprog.c  -L/home/newhall/lib -lmine  //Linux

   C:\> gcc -o myprog myprog.c  -LC:\home\newhall\lib -lmine  //Windows

... подробнее о командной строке gcc здесь .

...