首页
社区
课程
招聘
调试实战 | 解决另外一个链接错误
发表于: 2023-10-22 20:06 9753

调试实战 | 解决另外一个链接错误

2023-10-22 20:06
9753

最近,在加班的过程中遇到一个链接错误 —— fatal error LNK1120: 1 unresolved externals。这种错误是老朋友了,对我这种常年写 bug 的老手来说,完全不是事儿,轻松+愉快。

根据以下的排查思路基本上能解决大多数链接错误:

既然报了链接错误,说明编译已经通过了,问题基本出现在库文件上。

有可能是找不到库文件(缺少库,或者库文件搜索路径不对),可以先确认工程配置是否正确或者使用 /verbose:lib 查看链接过程。

也可能是库文件不对(没包含对应的导出符号),可以通过 dumpbin /exports error.lib > error.txt 查看 lib 库中的导出符号。按照以上步骤排查基本上可以解决绝大多数链接错误。

好的,让我们一起来实战一下吧。

说明: 实际项目需要保密,本文的截图是我在本地用测试工程做的。

通过查看工程设置可以得知,依赖的库文件是 TestLNK1120Dll.lib,附加库目录中也添加了这个 lib 所在的路径。肉眼看上去没问题。为了保险(之前遇到过更诡异的错误,配置看上去都对,但是实际的值不对),还是通过 /verbose:lib 选项看一下链接过程。

在对应工程上,右键 -> 属性 -> Configuration Property -> Linker -> Command Line,在 Additional Options 下面输入 /verbose:lib 即可。

link-option-verbose-lib
设置好后,重新编译。可以看到链接时整个库查找过程,如下图。

verbose-lib-link-process
至此,可以确定库文件路径配置没错,那大概率是库文件中的符号与程序中的符号不匹配导致的。

说明: 如果找不到 .lib 文件,报错应该类似下面这样:

fatal error LNK1104: cannot open file 'TestLNK1120Dll.lib'

使用 dumpbin 可以查看 lib 库中的所有导出符号,命令如下:

dumpbin /exports d:\test\TestLNK1120.lib > d:\TestLNK1120.txt

注意: 以上命令需要在 dumpbin.exe 所在目录下执行,或者启动 Developer Command Prompt for VS xxx

然后根据 vs 编译错误提示中的符号在 TestLNK1120.txt 中搜索,应该是没有匹配项目。

确实可以在 TestLNK1120.txt 中根据函数名 GetStaticData 搜到相关记录,但是根据完整的符号名称搜不到。

TestLNK1120.txt 文件中与 GetStaticData 相关的内容是:

?GetStaticData@@YAAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ (class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __cdecl GetStaticData(void))

vs 报错提示是:

TestLNK1120.obj : error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl GetStaticData(void)" (?GetStaticData@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-10-24 13:23 被编程难编辑 ,原因: 上传图片
收藏
免费 3
支持
分享
最新回复 (8)
雪    币: 3535
活跃值: (31016)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-10-22 23:03
1
雪    币: 23081
活跃值: (3442)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
3
最近三篇图都挂了
2023-10-23 09:49
0
雪    币: 1440
活跃值: (1401)
能力值: ( LV3,RANK:23 )
在线值:
发帖
回帖
粉丝
4
希望把之前发的图片都修复下,看着有点难受
2023-10-23 10:48
0
雪    币: 3535
活跃值: (31016)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
图挂了
2023-10-23 13:48
1
雪    币: 8519
活跃值: (9122)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
6
KevinsBobo 最近三篇图都挂了
感谢版主提醒,已经补传了。好像看雪的自动传图功能有 bug,预览的时候能看到图,后面就丢了
2023-10-24 13:24
0
雪    币: 8519
活跃值: (9122)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
7
Black貓①呺 希望把之前发的图片都修复下,看着有点难受
感谢提醒,已经补传了
2023-10-24 13:25
0
雪    币: 8519
活跃值: (9122)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
8
秋狝 图挂了
感谢提醒,已经补传了
2023-10-24 13:25
0
雪    币: 8519
活跃值: (9122)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
9
秋狝 感谢分享
感谢阅读
2023-10-24 13:25
0
游客
登录 | 注册 方可回帖
返回
//