Вопрос

Я столкнулся с некоторыми ошибками в одном из компонентов boost, который я использую.Немного проанализировав проблему, я обнаружил, что я был не единственным, и автор уже выпустил исправление, которое доступно в магистрали boost SVN.

Каков был бы наилучший подход, если бы я хотел обновить только этот компонент и повторно использовать уже созданные библиотеки?Компонент - это не только заголовок.

  • Компилятор:MSVC 9 с пакетом обновления 1, TR1
  • Операционная система:Перспектива
  • Повышение:1.39 от BoostPro computing
  • глючный компонент: Повышающая Волна
  • ошибка:условия гонки.Ошибка была исправлена в мае этого года, но, насколько я могу судить, они не включили ее ни в один релиз.

Что я делал до сих пор:

  • проверка svn вложенного каталога wave
  • заменен локальный поддир
  • теперь я ищу способ указать, что я хочу создать просто волна

Я немного устал от перестройки всей библиотеки boost.Я не знаю, готов ли trunk к производству прямо сейчас.

Это было полезно?

Решение

Вот что я в итоге сделал:

  1. Сначала я проверил версию библиотеки wave, где проблема была исправлена (53230).После переноса его в мою локальную копию я обнаружил следующие изменения:

    - wave повторно использовала реализацию boost.iterator вместо того, чтобы предоставлять свою собственную

    - была обновлена реализация flex_string

    - счетчик ссылок был сделан атомарным.Это должно быть исправлением ошибки

  2. Затем я просто заменил свой каталог boost / wave на каталог из SVN.Я запустил bootstrap.bat (если вы используете BoostPro, вам нужно будет получить это из zip-архива boost sources), а затем я запустил bjam:

    bjam --build-directory= набор инструментов сборки = вариант msvc= ссылка на отладку | выпуск = статическая потоковая передача = ссылка на несколько сред выполнения = общий доступ --с-волной

    Добавление --with-wave приведет только к созданию wave и его зависимостей.

  3. На этом этапе я получил ошибки компиляции:похоже, что Дух тоже был обновлен.Я скачал Spirit (53252) из SVN и переиздал команду bjam.

    Библиотека была собрана чисто, и я скопировал две библиотеки в свою папку boost lib.

После выполнения этих шагов я перестроил свой проект, и аварийные ошибки исчезли.

Другие советы

Наилучший подход:создайте патч с помощью diffвнесение изменений в репозиторий (например,проверив часть репозитория и используя svn diff), затем примените исправление к файлам в вашей установке Boost с помощью patch (Инструмент Unix).

Для этого может потребоваться Unix-подобная консоль в Windows (напримерCygwin).В качестве альтернативы, возможно, вы можете использовать клиент Windows SVN, такой как TortoiseSVN, но я не уверен, что это позволяет исправлять файлы вне системы управления версиями.

Вы говорите о библиотеке заголовков?Если нет, вам также необходимо перестроить эту часть вашей библиотеки Boost, и, к сожалению, я не думаю, что это вполне совместимо с установщиком Boost от BoostPro.

Что ж, вы можете проверить журналы и увидеть точную ревизию, в которой была исправлена проблема, указать только эту ревизию и вручную применить исправление.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top