可能的重复:
什么是未定义的引用/未解析的外部符号错误以及如何修复它?

我正在致力于将大量 .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 个函数之外,其余所有函数都链接得很好。

有任何想法吗?

有帮助吗?

解决方案

丢失的符号是__imp__htonl@4,这是一个C ++粉碎为htonl名称,它是从宿主转换长值到网络顺序的功能。在@ 4用于裂伤的输入参数,并且是C ++对函数重载支撑部分,以允许所述接头来解决权函数w / o的名称冲突。

请确保您连接到您引用从这个符号的网络库。据推测软件包使用该符号的一些特殊的定义,而不是宏它通常是

其他提示

您确定签名匹配?一定要检查签约的烦躁和常量性。此外,确保功能没有内联。

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

此外,如果您正在使用 GCC/mingw,您可能需要看一下: MinGW 链接器错误:温索克

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top