Повышение сбоя при связывании параметра Visual Studio 2008 Express «/ Mtd» - PullRequest
1 голос
/ 07 августа 2010

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.Быстрый тест показал, что все работает нормально.Странно ...

1 Ответ

1 голос
/ 07 августа 2010

My решение обходной путь выглядит следующим образом:

  • Установите boost с помощью BoostPro Installer .Он устанавливает Boost в каталог «C: \ Program Files».
  • Используйте утилиту bcp (входит в комплект), чтобы создать уменьшенную копию репозитория boost.См. Мой оригинальный пост для примера.
  • Добавьте сгенерированные заголовки в папку моего проекта
  • Также скопируйте все необходимые библиотеки в папку проекта.
  • Обновление проектов Visual Studio включаети пути компоновщика, где это необходимо.
  • Проверьте это.
  • Передайте все это в SVN.
  • Вуаля, я знаю, что у меня есть хранилище кода с батарейками:)

На самом деле, мой первоначальный вопрос остается без ответа, я до сих пор не знаю, почему мои попытки повышения 1.43 потерпели неудачу.Возможно, это проблема конфигурации.Однако это удовлетворительный обходной путь.

Кстати, причина, по которой я вернулся к Boost 1.42, заключается просто в том, что установщик BoostPro еще не поддерживает 1.43.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...