未解析的外部符号接收线程(这是_beginthread的入口点)
Unresolved External Symbol receiveThread (that's the entry point for _beginthread)
我正在尝试为我正在制作的游戏提供 UDP 连接,套接字的输入通过第二个线程读取,因此游戏可以在等待消息时继续运行。我让它在一个单独的项目中工作,但是当将其移植到我的游戏代码时,我收到一个未解析的外部符号错误:
LNK2019:未解析的外部符号"void __cdecl receiveThread(void *)"(?receiveThread@@YAXPAX@Z)在函数"public: bool __thiscall Network::setupServerUDP(void)"(?setupServerUDP@Network@@QAE_NXZ)中引用。
我已经用谷歌搜索了一下,每个人都说运行时库应该设置为多线程,我做到了(在 MVS 2010 中,我认为甚至不可能将其设置为单线程),但它不能解决错误。我敢肯定,这只是一些愚蠢的选项,在某处设置了错误的东西。但我就是想不出它是什么。
我已经包含了ws2tcpip.h,并且我已经链接到正确的库:#pragma 注释(lib,"Ws2_32.lib")。
我的测试项目和游戏项目之间的唯一区别是测试项目是一个控制台应用程序,另一个是 Windows 应用程序,但我不明白为什么这应该是任何问题。思潮?
感谢您的帮助!
干杯
格言
解析的函数不是_beginthread
,而是receiveThread
。这是您的函数 - 您作为参数提供给_beginthread
的线程入口点。您是否使用正确的调用约定编写了该函数?真的cdecl
吗?如果将其声明为 cdecl 但在没有显式调用约定的情况下实现,则会导致这样的链接错误。例如,此代码会导致链接错误:
extern "C" { void receiveThread(void*); } //There's a cdecl function somewhere
//...
_beginthread(receiveThread, 0, 0); //Let's refer to it
//...
void receiveThread(void *p) //But this is not it! It's stdcall.
{
//Do something
}
若要解决此问题,请确保receiveThread
的实现使用 cdecl 约定或声明为 extern "C"
。
作为记录,_beginthreadex
期望使用标准调用函数,而不是 cdecl。使用_beginthreadex
,您不必担心约定。
链接器找不到函数的实现 receiveThread
我猜是在ws2tcpip.h中声明
如果Ws2_32.lib
包含实现,请尝试将其添加到项目属性菜单下的链接器->其他依赖项->输入(假设你使用的是 Visual Studio)。
- 使用递归的数组的最小值.这是怎么回事
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 这是实现图形的坏方法吗
- 当基类是依赖类型时,这是一个缺陷吗
- 当C++中需要自动删除时,这是静态的正确用法吗?
- 这是关于成员访问规则的正确摘要吗
- 这是插入排序的正确实现吗?
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 如何在OpenCV中检测这是谁的脸?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 这是GoogleTest AssertionResult中的错误吗?
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 这是 basic.def.odr 部分的缺陷吗?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- 这是 ubuntu 16.04 中的 gdb 错误吗?
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?