Программа 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): undefined ссылка на `getaddrinfo '

C: \ Users \ rahul \ AppData \ Local \ Temp \ ccWqZC7C.o: ak1.c :(. Text + 0x1fa): undefined ссылка на `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 micrsoft.

Помогите, пожалуйста !!!


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


Ответы (1)


Вы используете GCC (предположительно MinGW), который не использует Microsoft SDK. 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
хорошо, сэр, что я должен добавить, как в первом и втором аргументе командной строки ... и как использовать командную строку в 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