可能重复:
What is an undefined reference/unresolved external symbol error and how do I fix it?
我正在将大量的.h和.lib文件从本机C ++包装到托管C ++,最终用作C#中引用的.dll。
我已经链接了.lib文件,到目前为止一切顺利。在包装最新的.h文件后,当遇到链接错误的两个函数时,我遇到了障碍:
error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function
"public: void __thiscall Field::setCharacter(unsigned char,int)"
(?setCharacter@Field@@QAEXEH@Z) myutils.lib
我在链接器选项中引用了myutils.lib
,因此不应该是问题。
奇怪的是,我在这个特定的.h文件中有大约20个函数,除了3个函数之外,其他所有函数都很好。
有什么想法吗?
答案 0 :(得分:5)
缺少的符号是__imp__htonl@4
,它是htonl的C ++错位名称,它是一个将长值从主机转换为网络顺序的函数。 @ 4用于修改输入参数,是C ++对重载函数的支持的一部分,允许链接器解析没有名称冲突的正确函数。
确保您链接到您引用此符号的网络库。据推测,你的软件包使用了这个符号的一些特殊定义,而不是通常使用的MACRO。
答案 1 :(得分:1)
您确定签名是否匹配?一定要检查签名和常量。另外,请确保没有内联函数。
答案 2 :(得分:1)
当我针对库编译然后在链接之前更改了库时,我遇到了这个错误。确保您的标题与您的库提供的标题相同(不是从其他体系结构中复制等)。当然,请确保您链接到ws2_32.lib(-lws2_32用于mingw / gcc)。
此外,如果您正在使用GCC / mingw,您可能需要查看此内容:MinGW linker error: winsock