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

时间:2016-09-06 13:01:44

标签: visual-studio-2015 scons cl lnk

我正在升级Windows构建计算机以使用

  • Visual Studio 2015 Update 3
  • scons 2.5.0
  • msbuild 14.0.25420.1

  • Visual Studio 2013 Update 4
  • scons 2.3.4
  • msbuild 12.0.31101

但是我遇到了构建错误。在“初始”运行期间,构建因

而失败
  

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

可能有几个这样的错误。如果我试图找到文件,我注意到它们不存在。

如果我重新运行它已经过去的构建。

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

仅供参考:构建在20台核心机器上并行运行。这可能会导致时间条件。但是之前的设置很好。

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

获取cl来执行它们

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

1 个答案:

答案 0 :(得分:0)

原来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) 

错误消失了。