“错误309”是什么意思?

2024-09-28 22:04:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

到目前为止,一切正常:测试正在构建过程中运行。

我最近发现了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] Error 309

此错误消息没有多大帮助。这意味着什么?如何修复它?在


Tags: pathtestenv可执行文件osprogramlibsjoin
1条回答
网友
1楼 · 发布于 2024-09-28 22:04:41

事实证明,幻数309在写为:0xC0000135(不知道为什么是C,但是135HEX==309DEC),它是STATUS_DLL_NOT_FOUND错误的标识符。在

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

这意味着VLD丢失了一些。潜伏在VLD安装目录(通常是:C:\Program Files(x86)\Visual Leak Detector)中,可以在bin\Win32子目录中找到两个DLL文件和一个清单文件。在

为了使构建不依赖于计算机的环境,您可以将目录添加到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

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

^{pr2}$

相关问题 更多 >