Ошибки *.obj при компиляции.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Доброе время суток!

При компиляции программы, возникают следующие ошибки:

Код: Выделить всё

Compiling...
bas.cpp
errtomsg.cpp
Linking...
bas.obj : error LNK2001: unresolved external symbol _send@16
bas.obj : error LNK2001: unresolved external symbol _recv@16
bas.obj : error LNK2001: unresolved external symbol _WSACleanup@0
bas.obj : error LNK2001: unresolved external symbol _closesocket@4
bas.obj : error LNK2001: unresolved external symbol _connect@12
bas.obj : error LNK2001: unresolved external symbol _inet_ntoa@4
bas.obj : error LNK2001: unresolved external symbol _htons@4
bas.obj : error LNK2001: unresolved external symbol _socket@12
bas.obj : error LNK2001: unresolved external symbol _WSAGetLastError@0
bas.obj : error LNK2001: unresolved external symbol _gethostbyname@4
bas.obj : error LNK2001: unresolved external symbol _WSAStartup@8
Debug/bas.exe : fatal error LNK1120: 11 unresolved externals
Error executing link.exe.

bas.exe - 12 error(s), 0 warning(s)
Перечитал MSDN…все равно не «победил». Получалась 1 ошибка, но обойти не смог, в детали не вдаюсь. Может, подскажите, что здесь можно сделать. Работаю в Visual C++ 6.0.

С уважением, Den!
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Подключи к проекту библиотеку Ws2_32.lib
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Общетеоретическая часть
Если линекр выдает подобную ошибку (unresolved external symbol), значит незалинкована какая-то либа.
Какая? Открываем MSDN на одну из тех функций, на которые рунается линкер. И внизу смотрим абзац "Requirements", строку "library"
(Кстати, и совместимость по операционкам тоже полезно посмотреть. А то был случай, когда один товарищ собирался и отлаживался на компе с Win2000 и зацепил функцию, для которой в MSDN было указано:
Windows 95/98/Me: Unsupported
А потом это дело пытались запустить на Win98 - и хрен что запустилось :) )

Практическая часть:
Открываем MSDN, например, на функцию WSACleanup.
В параграфе "Requirements" читаем:
Header: Declared in Winsock2.h.
Library: Use Ws2_32.lib.

Следовательно, тебе надо подлинковать в проект Ws2_32.lib.
Хотя, что интересно, в данном случае пройдет и wsock32.lib.
Какую они дают разницу в итоге (по производительности или еще в чем) - честно говоря, без понятия. Но в итоге и виндовые DLL-ки в этих двух случаях будут цепляться различные.
(В одном из моих Си-шных проектов [глянул сейчас] залинкована wsock32.lib. Но почему она, а не Ws2_32.lib - объяснить не смогу :) )


Кстати, было бы интересно услышать (если вдруг кто знает), кака разница между Ws2_32.lib и wsock32.lib?
Может, одна из DLL-ей - "устаревшая"? Как это часто пишут в MSDN: "оставлена для совместимости с прошлыми программами"?
Den
Сообщения: 62
Зарегистрирован: 09 сен 2004, 15:10

Спасибо, господа! Пока не подключал, но думаю пройдет. ВВВ это было основательное объяснение!
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Den писал(а):Спасибо, господа!
Тамбовский волк тебе господин! :lol: /шутка ]ВВВ это было основательное объяснение![/quote]Не... Ну так этА... Чтоб ежели в следующий раз что-нить подобное у тебя возникнет, чтоб не паниковал, а действовал бы по опробованной схеме :wink: :roll:
Ответить