未解决的外部符号

时间:2009-07-20 14:21:22

标签: c++ linker unresolved-external

  

可能重复:
  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个函数之外,其他所有函数都很好。

有什么想法吗?

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