网路上没找到,记录在这边,说不定未来有机会帮上其他人。
#前提:
一个解决方案,里面有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