奇怪的链接错误
共 1264字,需浏览 3分钟
·
2020-12-07 09:23
缘起
一般情况下链接错误很好解决,最常见的是重定义和找不到外部符号,不过这次遇到的链接错误有些奇怪,一起来看看吧。
初遇错误
写完代码,开开心心的编译,没想到遇到下面的链接错误。
![](https://filescdn.proginn.com/92b958beaea5be235a4e102d944384f4/099269d0a4b38026f9794764013c5d3c.webp)
不慌,这种错误见的太多了,见怪不怪了。终极原因是:链接的时候找不到合适的库。大概率是库路径设置不对,或者没引用这个 lib
。因为代码中明确使用 #pragma comment(lib, lib_path)
引用了库,所以问题大概率出在库路径上。
![](https://filescdn.proginn.com/741a9187e80632946dfee39ad9d3f700/53820503998a175c3e505e407d62c060.webp)
在检查工程设置前,先介绍下两个工程的输出目录,也就是 $(OutDir)
的值。
TestLinkErrorExe
工程的 OutDir
如下图所示:
![](https://filescdn.proginn.com/915cad96a5e32d9072d79489d89ab79b/db4b122a781dca79ad4d41e4d7b4caba.webp)
TestLinkErrorDll
工程的 OutDir
如下图所示:
![](https://filescdn.proginn.com/23e8d362917e7d69f3689a7e6355c5e4/8a5a5798a36e456ce5bb215aad654440.webp)
都指向了 $(SolutionDir)bin\$(Platform)\$(Configuration)\
。$(SolutionDir)
指的是 .sln
文件所在的路径,这里是 E:\working\MyTestProjects\TestLinkError\
,因为编译的是 64
位 Debug
版本,所以 $(Platform)
的值是 x64
。$(Configuration)
的值是 Debug
。所以,最终的路径是:E:\working\MyTestProjects\TestLinkError\bin\x64\Debug\
。
有了这个背景介绍,就可以接着查看工程设置了。
检查工程设置
因为 TestLinkErrorDll.lib
是 TestLinkErrorDll
工程产生的,需要保证 TestLinkErrorDll
先编译,如果先编译 TestLinkErrorExe
的话,链接的时候,TestLinkErrorDll
还没编译,TestLinkErrorDll.lib
也就不会产生,自然会找不到。所以,需要设置编译顺序,最简单的实现方式就是设置工程依赖。
在 Solution
上 右键 -> Project Dependencies...
打开 Project Dependencies
设置界面,如下图:
![](https://filescdn.proginn.com/3b3fa53e844ba3304c02c4227bd376e2/7d647a7a9b8eede4fa213d0401013ecf.webp)
经检查,工程依赖已经设置正确了。
检查完工程依赖,再检查库目录( Library Directories
)。有两个地方需要检查:
![](https://filescdn.proginn.com/9171b5912556b0ad439159d14ae16940/15f9be8cd98f72411ce74f7eb7abc087.webp)
![](https://filescdn.proginn.com/62cb892671e3dfddf61e4994c4ac4501/8917d73f5f5a7eb05d878f1a8649f019.webp)
经检查,这两处设置确实是正确的。纳尼?所有设置都正确!为什么结果不正确呢?直接打开 .vcxproj
文件查看里面的 OutDir
的值,如下图:
![](https://filescdn.proginn.com/e41097b37ee64341443577ca1fc2deb9/67a444afaf2884e711c8543877322c1a.webp)
从图中可知,
在
的下方。果断调整顺序,再次编译,一切顺利。
反思
再次打开有问题的工程,查看 OutDir
属性的值,是错误的路径!如下图:
![](https://filescdn.proginn.com/931f7a0b483eba8c6590f116fc8c645c/ffdf65a32e536cd52c03013c330f6561.webp)
总结
链接错误不可怕,耐心细致的查看工程设置,基本上都能解决掉。
感谢你的分享,点赞和在看