6

可能重复:
什么是未定义的引用/未解决的外部符号错误,我该如何解决?

我正在将大量 .h 和 .lib 文件从本机 C++ 包装到托管 C++ 以最终用作 C# 中的引用 .dll。

我有链接的 .lib 文件,到目前为止一切进展顺利。包装最新的 .h 文件后,当 2 个函数返回链接错误时,我遇到了障碍:

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 个函数。

有任何想法吗?

4

3 回答 3

6

缺少的符号是__imp__htonl@4,它是 htonl 的 C++ 错位名称,它是一个将 long 值从主机转换为网络顺序的函数。@4 用于修改输入参数,是 C++ 对重载函数的支持的一部分,以允许链接器在没有名称冲突的情况下解析正确的函数。

确保您已链接到从中引用此符号的网络库。大概你的包使用了这个符号的一些特殊定义,而不是通常的 MACRO。

于 2009-07-20T14:45:00.820 回答
1

你确定签名匹配吗?一定要检查签名和常量。另外,确保函数没有内联。

于 2009-07-20T14:28:13.563 回答
1

我在针对库进行编译时遇到了这个错误,然后在链接之前更改了库。确保您的标头与您的库提供的标头相同(不是从其他架构复制等)。当然,请确保您链接到 ws2_32.lib(-lws2_32 用于 mingw/gcc)。

此外,如果您使用的是 GCC/mingw,您可能需要查看以下内容:MinGW 链接器错误:winsock

于 2010-05-20T14:59:26.467 回答