首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

VNC 協議從 TCP 遷移至 UDP 實踐:ENET 庫鏈接錯誤完整排查記錄

     編輯:關於C語言

專案背景

嘗試使用 ENET 庫重寫 VNC 服務端,將傳輸協議從 TCP 改為 UDP。編譯通過,鏈接階段爆出大量 LNK2019 未解析的外部符號錯誤。

第一輪:Winsock 符號缺失

host.obj : error LNK2019: 無法解析的外部符號 __imp__htonl@4
win32.obj : error LNK2019: 無法解析的外部符號 __imp__setsockopt@20
... (共 26 個 Winsock 相關符號)

解決方案

在專案中加入 Winsock 庫:

#include 
#pragma comment(lib, "ws2_32.lib")
// 或專案屬性 → Linker → Input → Additional Dependencies 加入 ws2_32.lib

第二輪:多媒體定時器符號缺失

加入 ws2_32.lib 後,剩餘 3 個錯誤:

win32.obj : error LNK2019: __imp__timeBeginPeriod@4
win32.obj : error LNK2019: __imp__timeEndPeriod@4
win32.obj : error LNK2019: __imp__timeGetTime@0

解決方案

加入多媒體庫:

#pragma comment(lib, "winmm.lib")
// 或專案屬性加入 winmm.lib

第三輪:主專案鏈接 ENET 靜態庫時的符號傳遞

enet.lib(win32.obj) : error LNK2019: __imp__WSASendTo@36
enet.lib(win32.obj) : error LNK2019: __imp__WSARecvFrom@36

原因與解決

ENET 靜態庫內部呼叫 Winsock 函數,主專案鏈接時必須同樣鏈接 ws2_32.lib,符號才能傳遞解析。在主專案同樣加入 #pragma comment(lib, "ws2_32.lib") 即可。

總結:Windows 下網絡程式鏈接清單

功能庫檔案關鍵符號示例
Winsock 基礎ws2_32.libhtonl, setsockopt, ioctlsocket, select, WSASendTo, WSARecvFrom
多媒體定時器winmm.libtimeBeginPeriod, timeEndPeriod, timeGetTime

看似棘手的鏈接錯誤,本質上皆為「缺少對應的 import library」。記錄備查,免得再踩坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved