TLDR
При связывании моей новой сборки надстройки с Visual Studio (/ Mtd), перед надстройкой возникает исключение 'bad_alloc' перед входом в основную функцию.
Подробно
Я создал библиотеку надстройки, используя инструкции из Getting Started .После настройки предварительных условий я использовал следующую команду сборки:
bjam -j8 --build-dir="C:\Development\Boost\boost-build" --build-type=complete msvc stage
Вышеупомянутая команда, по-видимому, создает все комбинации отладки / выпуска и общих / статических сборок.
Затем я создал пустой VisualСтудия проекта и добавил следующий код в основной файл:
#include <boost/thread.hpp>
int main()
{
return 0;
}
Я также изменил настройки генерации кода на Многопоточная отладка (/MTd).
На данный момент я не сделалвсе же настройте любые пути к библиотекам в моем проекте.Итак, сборка завершилась следующей ошибкой компоновщика:
LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc90-mt-sgd-1_43.lib'
Хорошо, я нахожу этот файл в моей сборке Boost и копирую его в '$ (SolutionDir) 3rdParty \ Boost_1_43_0 \ libs', который я добавил в Дополнительные каталоги библиотек .Далее следует следующая ошибка:
LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc90-mt-sgd-1_43.lib'
Хорошо, я также нахожу этот файл в моей директории для Boost сборки и копирую его в путь к моей библиотеке.
После этого проект успешно собирается, но 'bad_alloc"в буст-код выдается исключение перед входом в основную функцию.
Кажется, что здесь есть несовместимость библиотек. Кто-нибудь знает, что именно не так, и как это исправить?
Обновление
Поскольку Джеймс МакНеллис упомянул, что это может быть что-то специфическое для библиотеки потоков, я опробовал 'program_options', и этот не вызывает никаких проблем (хотя основная часть еще пуста).
Простой пример приложения, использующего улучшенную библиотеку 'signal', также отлично работает. Так что это действительно библиотека потоков, которая вызывает некоторые проблемы.
Версия
I'mв настоящее время использую Boost v1.43.0, я посмотрю, смогу ли я воспроизвести проблему с v1.42.
BCP
Одна деталь, которую я хотел бы упомянуть, это то, что я использую раздетуюделатьwn версия Boost.Я создал подмножество с помощью следующей bcp утилиты:
mkdir ./output
bcp bind function lexical_cast noncopyable optional program_options smart_ptr signals signals2 thread ./output
Это, вероятно, не вызывает 'bad_alloc', хотя ...
Boost 1.42
Я только что установил Boost 1.42 с помощью BoostPro Installe r.Быстрый тест показал, что все работает нормально.Странно ...