3

私たちのビルドでは、次のような単体テストを含む実行可能ファイルを作成しています。

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

このエラー メッセージはあまり役に立ちません。それは何を意味し、どのように修正するのですか?

4

1 に答える 1

6

マジック ナンバー309は次のように記述した方がググりやすい0xC0000135ことがわかります(理由はわかりませんCが、135HEX == 309DEC)。これはSTATUS_DLL_NOT_FOUNDエラーの識別子です。

したがって、SCons を介してリークするのは SCons エラーではなく、Windows エラーです。

これは、VLD に必要な一部の DLL が欠落していることを意味します。VLD インストール ディレクトリ (通常は C:\Program Files (x86)\Visual Leak Detector) に潜んでいると、2 つの DLL ファイルと 1 つのマニフェスト ファイルが bin\Win32 サブディレクトリにあります。

ビルドがマシンの環境に依存しないようにするには、ディレクトリを追加するか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)
于 2015-01-06T23:10:27.180 に答える