У меня есть проект, скомпилированный с использованием __cdecl
соглашения о вызовах (msvc2010), и я скомпилировал boost, используя тот же компилятор, используя настройки по умолчанию.
Проект связан с boost, но я во время выполнения получил сообщение assert:
Файл: ... \ boost \ boost \ program_options \ detail \ parsers.hpp
Линия: 79
Ошибка проверки времени выполнения # 0 - значение ESP не было должным образом сохранено при вызове функции. Обычно это является результатом вызова функции, объявленной с одним соглашением о вызовах с указателем функции, объявленным с другим соглашением о вызовах.
Есть следующие вопросы:
- какое соглашение о вызовах ускоряет сборку по умолчанию в Windows (msvc2010)
- как скомпилировать boost с соглашением о вызовах __cdecl
- почему boost не смог предотвратить соединение с кодом с другими соглашениями о вызовах? Я понял, что в boost есть действительно умный код автоматического включения библиотеки.
Обновление # 1
Похоже, что Boost компилирует и связывает с соответствующим соглашением о вызовах, но во время выполнения я получаю описанную выше проблему. Я сделал пример приложения, используя тот же код, и он работает, но в моем приложении это не удается. Единственное отличие может быть от конфигурации проекта или включает / stdafx.h