program.exe: Native завершил работу с кодом 255 (0xff)

Я использую ускоренные потоки, и все отлично работает при компиляции с /MD, но вместо этого я предпочитаю компилировать с /MT.

Затем я получаю проблему: program.exe: Native завершил работу с кодом 255 (0xff).

Это происходит в этой строке:

thread_1 = поток (testThread, тест);

копнув глубже, я понял, что проблема в том, что _crtheap равен 0, т.е. он не инициализирован.

как показано в mlock.c

/*
     * Check if CRT is initialized. The check if _crtheap is initialized
     * will do the job. More over we had to add this test in initlocks because
     * in debug version we don't endup calling lock before calling malloc_base,
     * where we check for crtheap.
     */
    if (_crtheap == 0) {
        _FF_MSGBANNER();    /* write run-time error banner */
        _NMSG_WRITE(_RT_CRT_NOTINIT);  /* write message */
        __crtExitProcess(255);  /* normally _exit(255) */
    }

так что теперь я знаю, в чем проблема, но я не могу понять, как это исправить.

boost построен следующим образом (для этого конкретного компилятора, который запрашивает .lib msvc++)

bjam toolset=msvc-10.0 variant=debug threading=multi link=static runtime-link=static

person zeta    schedule 07.03.2012    source источник
comment
Пожалуйста, не могли бы вы привести полный пример?   -  person Vicente Botet Escriba    schedule 15.12.2012


Ответы (1)


Мне кажется классическим сочетанием икоты ЭЛТ:

  1. Библиотека повышения связана со статической отладочной CRT (с использованием так называемого переключателя /MD)
  2. Ваше приложение связано со статическим выпуском CRT (с использованием так называемого переключателя /MT)

Пожалуйста, попробуйте перекомпилировать библиотеку boost, используя этот рецепт.

bjam toolset=msvc-10.0 variant=release threading=multi link=static runtime-link=static
person Shmil The Cat    schedule 12.03.2013