cl:命令行错误 D8022:无法打开 'c:\users\admini~1\appdata\local\temp\tmpjbx8xe.lnk'

cl : Command line error D8022 : cannot open 'c:\users\admini~1\appdata\local\temp\tmpjbx8xe.lnk'

我正在升级 Windows 构建要使用的机器

来自

但是我遇到了构建错误。在 'initial' 运行 期间,构建因

而失败

cl : Command line error D8022 : cannot open'c:\users\admini~1\appdata\local\temp\tmpjbx8xe.lnk'

可能有多个这样的错误。如果我尝试查找文件,我会发现它们不存在。

如果我重新运行 构建它会通过。

还有其他人遇到过这个问题吗?有解决办法吗?

仅供参考:构建是 运行 在 20 台核心机器上并行进行的。这可能会导致时序条件。但是对于之前的设置来说没问题。

更新:经过进一步调查,这看起来可能是 SCons 问题。 SCons 似乎创建了 .lnk 文件。它将 link 命令行存储在这些文件中,并通过

获取 cl 来执行它们

cl @c:\users\admini~1\appdata\local\temp\tmpjbx8xe.lnk

事实证明,SCons 2.3.5 引入了一个边缘案例错误。在以下提交中

https://bitbucket.org/scons/scons/commits/bad59be7270dbbe62c7868a532fad84480f95fae https://bitbucket.org/scons/scons/commits/9aa37cd21e99eb684ab6ae8f7b21e0a71751ac7f https://bitbucket.org/scons/scons/commits/da5785c5f30f852734b3f985b798a5508bfea9db

进一步调查后,我发现故障仅发生在构建脚本的一部分中。他们在做类似

的事情
# Get all the .cpp files
sources = getAllSources() 

# Create a group of .obj files from the sources
objFiles = envLocal.Object(sources) 

# Create a shared library from the sources
artifacts = envLocal.SharedLibrary('Library', sources) 

# Add the .obj files to the link path on another environment
envTest['LIBS'].append(objFiles)

test_sources = getAllSources() # Get all the test .cpp files

# Create a test executable which re-uses the .obj files from LIBS on another environment
envTest.Program('TestExecutable', test_sources) 

当我将代码更新为

# Create a shared library from the objFiles instead of sources
artifacts = envLocal.SharedLibrary('Library', objFiles) 

错误消失。