Visual Studio 编译得过但 MSBuild 编译失败的情况

网路上没找到,记录在这边,说不定未来有机会帮上其他人。

#前提:
一个解决方案,里面有A、B、C三个专案,B专案依赖于A、C专案依赖于B
C为unittest的.exe执行档,A与B皆编译为.lib档。

#状况:
编译方法是依序编译A B C三个专案:

msbuild.exe A.vcxproj /p:configuration=debug /p:platform=x64msbuild.exe B.vcxproj /p:configuration=debug /p:platform=x64msbuild.exe C.vcxproj /p:configuration=debug /p:platform=x64

编译到C专案时发生问题,显示LNK2001: unresolved external symbol,
所有B专案的function皆被判定为外部符号,无法使用。
属性→连结器→输入→其他相依性已增加B专案的lib。

其中若使用Visual Studio编译方案皆无问题,或是使用

msbuild.exe solution.sln /p:configuration=debug /p:platform=x64

编译整个解决方案皆可编译成功

##编译错误时,console的输出可以看到:

Link:  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\link.exe ... "D:\project\.\x64\Debug\*Undefined*.lib"...

原本应该出现B.lib的地方变成了Undefined.lib

#原因:
属性→连结器→输入→其他相依性中不能使用SolutionName,在单独编译时会找不到对应的名称:
(X)

$(SolutionDir)$(PlatformTarget)\$(Configuration)\$(SolutionName).lib

(O) 请使用直接档名指定:

$(SolutionDir)$(PlatformTarget)\$(Configuration)\B.lib

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章