奇怪的链接错误

缘起

一般情况下链接错误很好解决,最常见的是重定义和找不到外部符号,不过这次遇到的链接错误有些奇怪,一起来看看吧。

初遇错误

写完代码,开开心心的编译,没想到遇到下面的链接错误。


不慌,这种错误见的太多了,见怪不怪了。终极原因是:链接的时候找不到合适的库。大概率是库路径设置不对,或者没引用这个 lib。因为代码中明确使用 #pragma comment(lib, lib_path) 引用了库,所以问题大概率出在库路径上。


在检查工程设置前,先介绍下两个工程的输出目录,也就是 $(OutDir) 的值。

TestLinkErrorExe 工程的 OutDir 如下图所示:


TestLinkErrorDll 工程的 OutDir 如下图所示:


都指向了 $(SolutionDir)bin\$(Platform)\$(Configuration)\$(SolutionDir) 指的是 .sln 文件所在的路径,这里是 E:\working\MyTestProjects\TestLinkError\,因为编译的是 64Debug 版本,所以 $(Platform) 的值是 x64$(Configuration) 的值是 Debug。所以,最终的路径是:E:\working\MyTestProjects\TestLinkError\bin\x64\Debug\

有了这个背景介绍,就可以接着查看工程设置了。

检查工程设置

因为 TestLinkErrorDll.libTestLinkErrorDll 工程产生的,需要保证 TestLinkErrorDll 先编译,如果先编译 TestLinkErrorExe 的话,链接的时候,TestLinkErrorDll 还没编译,TestLinkErrorDll.lib 也就不会产生,自然会找不到。所以,需要设置编译顺序,最简单的实现方式就是设置工程依赖。

Solution右键 -> Project Dependencies...  打开 Project Dependencies 设置界面,如下图:


经检查,工程依赖已经设置正确了。

检查完工程依赖,再检查库目录( Library Directories)。有两个地方需要检查:



经检查,这两处设置确实是正确的。纳尼?所有设置都正确!为什么结果不正确呢?直接打开 .vcxproj 文件查看里面的 OutDir 的值,如下图:


从图中可知,<OutDir>...</OutDir><LibraryPath>...</LibraryPath> 的下方。果断调整顺序,再次编译,一切顺利。

反思

再次打开有问题的工程,查看 OutDir 属性的值,是错误的路径!如下图:


总结

链接错误不可怕,耐心细致的查看工程设置,基本上都能解决掉。

感谢你的分享,点赞和在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值