【发布时间】:2013-09-21 18:34:39
【问题描述】:
我创建了一个项目,并且像往常一样创建了 2 个平台(64 位和 32 位)(这是一个 DLL)。 我编写了代码并对其进行了测试,一切都很顺利(我总是在 64 位配置上进行测试),但由于我想在我的 32 位 XP 虚拟机上进行测试,我遇到了 LINK 问题。
我在我的代码中使用 API WSASelectEvent(与许多其他 WSA/Winsock api 一样),但在 32 位配置中,并且仅在 32 位配置中,链接器拒绝找到 _WSASelectEvent。
我得到了众所周知的 LNK2001 错误:
“错误 LNK2001:无法解析的外部符号 _WSAEventSelect”
我确定链接到 ws2_32.lib 并且确定包含 winsock2.h,因为我使用其他 api(例如 WSAStartup 和 WSACleanup 以及我的代码中的结构和诸如此类的东西,显然是使用 winsockets)。
所以知道我喜欢在工作中搞乱配置(这是一个相当小的项目,没什么太大的),我决定一定要去,并在 Visual Studio 中创建了一个新项目,将代码放入并创建一个新平台编译(当然使用 GUI) 但我得到了相同的结果。
我已经在网上冲浪了 2-3 个小时没有修复,我什至尝试比较编译命令行和链接命令行,它们除了正常的 /MACHINE:x64/x86 和目标文件夹之外是完全相同的。
您可能知道这个问题或解决方案吗?
注意:: intellisense 警告我这一点,Visual Studio 不会在编写 WSASelectEvent( 时建议参数列表,但“转到定义”肯定会将我带到 Winsock2.h。
【问题讨论】:
-
也许这是头文件包含的问题。
winsock vs winsock2. -
我已经检查过了,绝望中我尝试包括这两个的每一个排列......
标签: c visual-studio-2010 compilation linker 32bit-64bit