python — Что означает «Ошибка 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)

До этого момента все работало нормально: тесты запускались во время сборки.

Я недавно нашел Визуальный детектор утечки инструмент и хотел включить это в сборку. Итак, я изменил среду для строителей следующим образом:

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

Это сообщение об ошибке не очень полезно. Что это значит и как это исправить?

3

Решение

Оказывается, магическое число 309 Больше googleable когда написано как: 0xC0000135 (понятия не имею, почему C, но 135HEX == 309DEC), и это идентификатор STATUS_DLL_NOT_FOUND ошибка.

Таким образом, это не ошибка SCons, а ошибка Windows, которая просачивается через SCons.

Это означает, что отсутствуют некоторые библиотеки DLL, необходимые для VLD. В каталоге установки VLD (обычно это C: \ Program Files (x86) \ Visual Leak Detector) два DLL-файла и один файл манифеста можно найти в подкаталоге bin \ Win32.

Чтобы сборка не зависела от среды компьютера, вы можете добавить каталог в env['ENV']['PATH'] или скопируйте файлы в каталог, где проводятся тесты.

Чтобы сделать последнее:

Вам нужен другой вариант конфигурации VLD, кроме каталога библиотеки, а именно каталога binaries. Давайте назовем это 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)
6

Другие решения


По вопросам рекламы [email protected]