Как связать библиотеку wsock32 через g ++? - PullRequest
3 голосов
/ 25 января 2012

Я использую minGW для Windows, пытаюсь скомпилировать программу на С ++.Я использовал сокеты там, поэтому я пытаюсь связать (не включая ... я уже включил winsock.h) библиотеку wsock32.Я знаю, что ключ -L предназначен для связывания, но ни одна из следующих команд не работает:

g++ C:\program.cpp -Lwsock32.lib
g++ C:\program.cpp -LC:\windows\system32\wsock32.dll
g++ C:\program.cpp -lC:\windows\system32\wsock32.dll
g++ C:\program.cpp -LC:\windows\system32\wsock32.lib

что мне делать ??

Ответы [ 2 ]

6 голосов
/ 25 января 2012

Как прокомментировал @Joshua, вы, вероятно, захотите ws2_32.dll.

Коллекция компиляторов GNU использует ranlib архивы (файлы A), а не файлы LIB Visual Studio.

Проект w32headers предоставляет gcc - и g++ -совместимые заголовки и архивы для большинства стандартных библиотек DLL Windows, включая ws2_32.dll.В качестве имени архива обычно используется имя DLL за вычетом расширения .dll, с префиксом lib и суффиксом .a (в соответствии с соглашением * nix о присвоении имен архивам).Таким образом, символы для ws2_32.dll находятся в libws2_32.a, что можно связать с помощью ‑lws2_32.

По умолчанию архивы w32headers находятся в пути к библиотеке GNU ld, чтобы иметь возможностьдля связи со стандартными DLL-библиотеками Windows нет необходимости добавлять каталоги библиотек с параметром ‑L.В вашем случае единственная необходимая опция - это ‑lws2_32:

g++ C:\Program.cpp -lws2_32

При условии, что компиляция и компоновка завершатся успешно, в текущем каталоге будет вывод a.exe.Вы можете переопределить имя выходного двоичного файла с помощью опции ‑o.

ПРИМЕЧАНИЕ: Я использовал неразрывные дефисы в своем ответе.Если вы копируете и вставляете параметры командной строки, обязательно замените все выглядящие дефисом символы на обычные дефисы.

5 голосов
/ 25 января 2012

Параметр -L предназначен для установки каталога, в котором компоновщик должен искать библиотеки / dll.

Параметр -l предназначен для именования библиотек / библиотек, с которыми вы хотите связать.

Это означает, что

g++ C:\Program.cpp -LC:\Windows\System32 -lwsock32

должна быть командой для компиляции вашей программы из обычной командной строки Windows.

Я подозреваю, что ваш компилятор может автоматически просматривать system32, поэтому вы можете просто пропустить параметр -L.

...