program.exe: исходный файл завершен с кодом 255 (0xff) - PullRequest
2 голосов
/ 07 марта 2012

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

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

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

thread_1 = thread (testThread, test);

после копания глубже, я понял, что проблема в том, что_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) */
    }

, так что теперь я знаю, в чем проблема, но для жизни я могу 't выяснить, как это исправить

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

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

1 Ответ

0 голосов
/ 12 марта 2013

Мне кажется, что это классический микс между CRT икота:

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

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

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