【Visual Studio】C++ 常见错误——无法解析的外部符号

关于C++常见错误“无法解析的外部符号”这一问题如何解决的思考与方法。

本文就使用libevent中遇到的相似问题着手进行分析该如何解决,其他情况仍需按实际情况进行分析处理。常见的原因无外乎缺少编译库。

LNK2001

LNK2001详细列表

  1. 如上图所示,报错为无法解析的外部符号,符号为 __imp__if_nametoindex@4, 一般这种符号就是缺少导出的接口,导出接口一般为 函数名@导出序号。基本可以确定是缺少一个链接库。其次 出现字符_imp,说明不是真正的静态库,而是某个动态库的导入库,导入函数和自己不同名,所以加了字符_imp。这里可以确定导出函数名为 if_nametoindex

  2. 确定了导出函数名为 if_nametoindex 之后,可以百度查看一下有没有相关函数的信息;
    if_nametoindex函数查询结果

    一搜发现为windows系统函数,是网络相关的接口函数,负责将ANSI接口转换为接口的本地索引。其声明需要包含的静态库文件为 Netio.lib。但是笔者这边测试之后发现无法打开 Netio.lib 这个静态库,再查找,找到其相关索引为 IP Helper Functions

  3. 至此,基本上可以确定其缺少的静态库和网络部分相关,找到相关函数(这里查看的函数为 AddIPAddress),查看其函数使用要求,需要引用 Iphlpapi.lib,引入到代码中,编译成功。
    4


【Visual Studio】C++ 常见错误——无法解析的外部符号
https://hodlyounger.github.io/A_OS/Windows/Visual Studio/无法解析的外部符号错误处理/
作者
mingming
发布于
2023年10月27日
许可协议