Подтвердить что ты не робот

Ошибка компоновщика MinGW: winsock

Я использую компилятор MinGW в Windows для компиляции моего приложения на С++ с сокетами. Моя команда для компоновки выглядит так:

g++.exe -Wall -Wno-long-long -pedantic -lwsock32 -o dist/Windows/piskvorky { there are a lot of object files }

и я также попробовал

g++.exe -Wall -Wno-long-long -pedantic -lws2_32 -o dist/Windows/piskvorky { there are a lot of object files }

но в обоих случаях я получаю эту ошибку:

build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0x33): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0xd0): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0x1ee): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x184): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1a5): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1cb): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1d3): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x6fe): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x724): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x7f0): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x83c): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x86f): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x8b5): undefined reference to `[email protected]'
build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x9c6): undefined reference to `[email protected]'

Есть ли у вас какие-либо идеи, в которых может возникнуть проблема?

4b9b3361

Ответ 1

Поместите -lws2_32 ПОСЛЕ списка объектных файлов - GCC ищет библиотеки и объектные файлы в том порядке, в котором они появляются в командной строке.

Просто чтобы помочь другим зрителям:

gcc hello.c -o hello.o -lws2_32

Ответ 2

с mingw на затмении: Меню - Projekt - Свойства - c/С++ Build - Настройки: Зарегистрируйтесь "Настройки инструмента" - MinGW C Linker - Разное: Нижняя часть "Другие объекты" добавить: "D:\Programmierung\mingw\lib\libwsock32.a" для пример. Никаких других записей для libwsock32.a для любых других необходимых свойств, особенно в библиотечных записях. Также нет флагов, относящихся к этому Lib.

Ответ 3

В:

Меню - Проект - Свойства - c/С++ Build - Настройки: Регистрация "Настройки инструмента" - MinGW С++ Linker - Разное: Нижняя часть "Другие объекты"

Добавьте: libwsock32.a из папки bin MinGW.

Ответ 4

Привет, я только что преодолел проблему выше...

Итак, сначала некоторые наблюдения...

Я знаю, что вы ссылаетесь на MinGw, но вам может понадобиться cygwin, чтобы обойти это, я не знаю, что это хорошо, я знаю, что cygwin лучше. Но я знаю, что они двоюродные братья друг другу.

Cygwin поставляется с предварительно скомпилированными библиотеками boost, но кто знает, какая версия. Я уверен, что можно проверить, но у кого есть время, чтобы сделать это правильно? Я не связываюсь с библиотеками повышения cygwin или потоковыми библиотеками mingw, я построил boost с нуля, используя gcc на windows (cygwin). Компиляция прошла отлично.

Во время этого написания boost на версии 1.47.0 я верю.

Уже тот факт, что cygwin использует версию (x?) и boost - 1.47.0, может стать серьезной проблемой. Представьте, что вы используете в качестве повышения.

Я использовал код, разработанный для boost 1.42, и имел связанные с ним ошибки компоновщика. Скомпилированный код, найденные заголовки и т.д...., но затем я получил ссылку undefined на WSA и т.д. И т.д.... opensocket this, закрыть сокет, который и т.д.

Таким образом, для повышения производительности сети, для создания сетевых сокетов требуется библиотека платформы, в которой была найдена в виде ws2_32 для Windows и для сокета для Linux.

Итак, если вы правильно используете boost и включаете в себя правильные библиотеки систем повышения, вам также может понадобиться библиотека, специфичная для ОС, для доступа к некоторым ресурсам (в этом случае сети).

После этого исчезают ошибки компоновщика. Вероятно, очевидно, чтобы ветераны активизировали то, что происходило здесь, но я не смог найти четкий ответ через google.