【问题标题】:What does "Error 309" mean?“错误 309”是什么意思?
【发布时间】:2015-03-04 17:18:58
【问题描述】:

在我们的构建中,我们正在创建一个带有单元测试的可执行文件,如下所示:

tests = env.Program(os.path.join(env['testDir'], name + '_test'),
                    src + createManifest(env),
                    LIBS = libs,
                    LIBPATH = buildLibPath(env),
                    LINKFLAGS = env['LINKFLAGS'],
                    CPPPATH = cppPath)

这会正确创建一个可执行文件,稍后将由以下构建器运行:

action = tests[0].abspath + '&& echo %DATE% %TIME% > ${TARGET}'
runTests = env.Command(source = tests,
                       target = 'test_'+name+'.tmp',
                       action = action)

到目前为止一切正常:测试正在构建期间运行。

我最近发现了Visual Leak Detector 工具,并希望将其包含在构建中。所以,我已经像这样改变了建设者的环境:

vldInclude = os.path.join(os.path.normpath(env['vldIncDir']), 'vld.h')
env.Append(CPPFLAGS='/FI' + vldInclude)
env.Append(LIBPATH = env['vldLibDir'])
vldLib = os.path.join(env['vldLibDir'], 'vld.lib')
libs.append(vldLib) # used in the Program call for the LIBS parameter, see above

scons: *** [build\debug\libname\test_libname.dummy] 错误 309

此错误消息不是很有帮助。这是什么意思以及如何解决?

【问题讨论】:

    标签: python c++ windows scons visual-leak-detector


    【解决方案1】:

    事实证明,当写成 0xC0000135 时,神奇的数字 309googleable(不知道为什么 C,但 135HEX == 309DEC) ,它是STATUS_DLL_NOT_FOUND 错误的标识符。

    因此,通过 SCons 泄漏的不是 SCons 错误,而是 Windows 错误。

    这意味着缺少一些 VLD 需要的 DLL。潜入VLD安装目录(通常为:C:\Program Files (x86)\Visual Leak Detector)的bin\Win32子目录下有两个DLL文件和一个manifest文件。

    不让构建依赖于机器的环境,您可以将目录添加到env['ENV']['PATH'] 或将文件复制到运行测试的目录。

    做后者:

    除了库目录之外,您还需要另一个 VLD 配置选项,即二进制文件目录。我们称之为vldBinDir。在构建启动时,您可以将这些文件复制到构建目录:

    def setupVld(env):
        sourcePath = env['vldBinDir']
        targetPath = env['testDir']
    
        toCopy = ['dbghelp.dll',
                  'vld_x86.dll',
                  'Microsoft.DTfW.DHL.manifest']
    
        nodes = []
        for c in toCopy:
            n = env.Command(os.path.join(targetPath, c),
                            os.path.join(sourcePath, c),
                            SCons.Defaults.Copy("${TARGET}", "${SOURCE}"))
            nodes.append(n)
    
        env['vldDeps'] = nodes
    

    然后,在创建特定测试时,请确保添加依赖项:

    for n in env['vldDeps']:
        env.Depends(tests, n)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-26
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2018-02-18
      • 2011-01-26
      相关资源
      最近更新 更多