2015-01-06 2 views
3

우리는 다음과 같이 단위 테스트와 실행 파일을 만드는 :"오류 309"는 무엇을 의미합니까? 우리의 빌드에서

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는을 : *** [\ 디버그를 구축 \ LIBNAME \ test_libname.dummy] 오류 309

이 오류 메시지 별로 도움이되지 않습니다. 그것은 무엇을 의미하며 그것을 고치는 법?

답변

6

이 같이 쓸 경우 매직 넘버 309더 googleable 없음을 밝혀 : 0xC0000135 (아무 생각이 왜 C하지만 135 HEX의 == 309 DEC), 그리고 그것은 STATUS_DLL_NOT_FOUND 오류의 식별자입니다.

그래서 SCons 오류는 아니지만 SCons를 통해 유출되는 Windows 오류입니다.

이것은 일부 DLL이 없거나 VLD에서 필요하다는 것을 의미합니다. VLD 설치 디렉토리 (대개 C : \ Program Files (Visual) 누출 감지기)에 숨어있는 두 개의 DLL 파일과 하나의 목록 파일은 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) 
+1

을하거나에서 적절한 경로를 포함하여 env [ 'ENV'] [ 'PATH'] ... – bdbaddog

+0

@bdbaddog 좋은 지적, 업데이트 됨, – BartoszKP

관련 문제