Програмата Winsock на език c не работи

Стартирах друга програма за стартиране на Winsock на език C на Windows7.

Намерих тази помощ в msdn: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737591%28v=vs.85%29.aspx

Тази програма не работи и показва следните грешки:

$ gcc ak1.c -o ak1.exe -lwsock32 -lws2_32 -lAdvapi32 -lmswsock

C:\Users\rahul\AppData\Local\Temp\ccWqZC7C.o:ak1.c:(.text+0x109): недефинирана препратка към `getaddrinfo'

C:\Users\rahul\AppData\Local\Temp\ccWqZC7C.o:ak1.c:(.text+0x1fa): недефинирана препратка към `freeaddrinfo'

c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: C:\Users\a mit\AppData\ Local\Temp\ccWqZC7C.o: лош адрес за преместване 0x20 в раздел `.eh_frame'

c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: крайната връзка е неуспешна: невалидна операция

collect2.exe: грешка: ld върна 1 изходен статус

Дали тази грешка е свързана с MICROSOFT SDK за Windows7, означава, че тези библиотеки не са добавени в моята система. Проверих, че „Advapi32“ не е под моя SDK на microsoft.

Помощ, моля !!!


person Beth Coder    schedule 16.04.2013    source източник


Отговори (1)


Използвате GCC (вероятно MinGW), който не използва SDK на Microsoft. getaddrinfo() и freeaddrinfo() са декларирани в изпълнението ws2tcpip.h на MinGW, но само ако е насочен WinXP или по-нова версия.

Добавете -D_WIN32_WINNT=0x0501 към командния ред на вашия компилатор, за да насочите XP.

person Michael Burr    schedule 16.04.2013
comment
Все още не работи, бих искал да спомена, че направих следните промени, за да стартирам тази програма (тъй като sys.h и т.н. никога не се изпълнява на Windows, ако не са направени следните промени): - person Beth Coder; 16.04.2013
comment
#ifdef WIN32 #include ‹Winsock2.h› #include ‹Ws2tcpip.h› #else #include ‹sys/types.h› #include ‹sys/socket.h› #include ‹sys/un.h› #include ‹sys /wait.h› #endif #include ‹stdio.h› #include ‹stdlib.h› #include ‹errno.h› - person Beth Coder; 16.04.2013
comment
Всичко, което знам, е, че използвайки MinGW 4.7.2 и командния ред, който сте публикували, когато компилирам програмата на уебсайта на MSDN, който посочихте, получавам същите недефинирани референтни грешки (обаче не получавам грешката за лош адрес на преместване). Когато добавя -D_WIN32_WINNT=0x0501 към командата за компилиране, не получавам грешки за свързване. Подходящата _WIN32_WINNT конфигурация е показана като необходима, като се разгледа заглавката на MinGW ws2tcpip.h. Може да се наложи да преинсталирате MinGW и/или да се уверите, че няма променливи на средата, които карат компилатора да извлича грешни заглавки или библиотеки. - person Michael Burr; 16.04.2013
comment
добре, господине, какво трябва да добавя като под 1-ви и 2-ри аргумент на командния ред...и как да използвам командния ред в mingw, опитах това ------› $ gcc ak1.c 127.0.0.1 -o ak1.exe -lwsock32 -lws2_32 -lAdvapi32 -lmswsock......тук 127.0.0.1 е команден ред, т.е. argv[1] (така мисля)...помогнете ми и поправете, ако греша - person Beth Coder; 16.04.2013
comment
gcc само компилира програмата - не я изпълнява и няма нищо общо с аргументите, подадени към нея. Компилирайте програмата с помощта на gcc -D_WIN32_WINNT=0x0501 ak1.c -o ak1 -lwsock32 -lws2_32 -ladvapi32 -lmswsock, след което я стартирайте с ak1 127.0.0.1. Разбира се, ще трябва да имате сървърната програма от msdn .microsoft.com/en-us/library/windows/desktop/ms737593.aspx компилиран и стартиран за командата ak1 127.0.0.1, за да направи нещо забележително. - person Michael Burr; 16.04.2013