Обновление Boost Wave из SVN
-
19-09-2019 - |
Вопрос
Я столкнулся с некоторыми ошибками в одном из компонентов boost, который я использую.Немного проанализировав проблему, я обнаружил, что я был не единственным, и автор уже выпустил исправление, которое доступно в магистрали boost SVN.
Каков был бы наилучший подход, если бы я хотел обновить только этот компонент и повторно использовать уже созданные библиотеки?Компонент - это не только заголовок.
- Компилятор:MSVC 9 с пакетом обновления 1, TR1
- Операционная система:Перспектива
- Повышение:1.39 от BoostPro computing
- глючный компонент: Повышающая Волна
- ошибка:условия гонки.Ошибка была исправлена в мае этого года, но, насколько я могу судить, они не включили ее ни в один релиз.
Что я делал до сих пор:
- проверка svn вложенного каталога wave
- заменен локальный поддир
- теперь я ищу способ указать, что я хочу создать просто волна
Я немного устал от перестройки всей библиотеки boost.Я не знаю, готов ли trunk к производству прямо сейчас.
Решение
Вот что я в итоге сделал:
Сначала я проверил версию библиотеки wave, где проблема была исправлена (53230).После переноса его в мою локальную копию я обнаружил следующие изменения:
- wave повторно использовала реализацию boost.iterator вместо того, чтобы предоставлять свою собственную
- была обновлена реализация flex_string
- счетчик ссылок был сделан атомарным.Это должно быть исправлением ошибки
Затем я просто заменил свой каталог boost / wave на каталог из SVN.Я запустил bootstrap.bat (если вы используете BoostPro, вам нужно будет получить это из zip-архива boost sources), а затем я запустил bjam:
bjam --build-directory= набор инструментов сборки = вариант msvc= ссылка на отладку | выпуск = статическая потоковая передача = ссылка на несколько сред выполнения = общий доступ --с-волной
Добавление --with-wave приведет только к созданию wave и его зависимостей.
На этом этапе я получил ошибки компиляции:похоже, что Дух тоже был обновлен.Я скачал Spirit (53252) из SVN и переиздал команду bjam.
Библиотека была собрана чисто, и я скопировал две библиотеки в свою папку boost lib.
После выполнения этих шагов я перестроил свой проект, и аварийные ошибки исчезли.
Другие советы
Наилучший подход:создайте патч с помощью diff
внесение изменений в репозиторий (например,проверив часть репозитория и используя svn diff
), затем примените исправление к файлам в вашей установке Boost с помощью patch
(Инструмент Unix).
Для этого может потребоваться Unix-подобная консоль в Windows (напримерCygwin).В качестве альтернативы, возможно, вы можете использовать клиент Windows SVN, такой как TortoiseSVN, но я не уверен, что это позволяет исправлять файлы вне системы управления версиями.
Вы говорите о библиотеке заголовков?Если нет, вам также необходимо перестроить эту часть вашей библиотеки Boost, и, к сожалению, я не думаю, что это вполне совместимо с установщиком Boost от BoostPro.
Что ж, вы можете проверить журналы и увидеть точную ревизию, в которой была исправлена проблема, указать только эту ревизию и вручную применить исправление.
Не рекомендуется обновлять только один компонент, так как boost в значительной степени использует себя повторно, поэтому, если интерфейс изменится, вы начнете получать всевозможные странные поведения.Возможно, если вы укажете компонент и ошибку, мы могли бы помочь вам в дальнейшем.