2010-01-09 2 views
37

Я использую компилятор MinGW для Windows, чтобы скомпилировать мое приложение C++ с сокетами. Моя команда для соединения выглядит следующим образом:Ошибка компоновщика MinGW: winsock

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]' 

У вас есть какие-либо идеи, где проблема может быть, пожалуйста?

+0

piškvorky se socketama? : D –

+0

@Matous Да, игра имеет сетевой режим – Gaim

ответ

98

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

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

gcc hello.c -o hello.o -lws2_32 
+4

Большое спасибо за советы – Gaim

+0

works .. thanks mate –

-2

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

Так вот некоторые наблюдения первого от ....

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

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

На момент написания этой статьи boost на версии 1.47.0 я верю.

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

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

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

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

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

5

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

+0

Пожалуйста, напишите все ответы на английском языке. –

+1

Ответ на английском ... Путь нет, но это не должно быть проблемой. – jazzpi

+0

Этот ответ работает. –

1

В:

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

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

Смежные вопросы