2011-01-04 7 views
5

Недавно я потратил некоторое время на работу над повышением версии 1.44.0, построенной на окнах с поддержкой iostreams как для фильтров сжатия zlib bzip2. По разным причинам было решено увеличить возможность создания библиотек zlib & bzip2 из источника. Для чего это стоит, но я не думаю, что это важно, версия MSVC, которую я использую, - VC9 (VS2008). Также обратите внимание, что из моего поверхностного исследования эта проблема должна применяться к любой версии boost с iostreams, созданной против bzip2 на окнах.boost iostreams с bzip2, построенный из исходного кода на окнах

Boost построен чисто, указав -sZLIB_SOURCE=<PATH> и -sBZIP2_SOURCE=<PATH>. Однако было замечено, что файлы boost_iostreams * .dll зависели от libbz2.dll (вместо boost_bzip2 * .dll), которых не было. Boost, однако, успешно создали boost_bzip2 * .dll. Обратите внимание, что я использую подстановочный знак в качестве заполнителя для всей информации о вариантах сборки.

Проблема:

Где-то жестко закодированы зависимость к libbz2.dll существует.

Решение:

Самое простое решение, которое я нашел, было модифицируют libbz2.def в комплекте с источником bzip2. А именно, удалить строку (как в bzip2 v1.0.6, это линия 1):

LIBRARY   LIBBZ2 

Удаление этой линии устраняет жестко запрограммированный зависимость к DLL с именем «libbz2.dll». Затем это позволяет создавать расширенные библиотеки с именем boost_bzip2 * .dll и создавать файлы * .lib и * .exp для правильного разрешения соответствующей DLL-библиотеки, а также экспортировать все необходимые функции.

Извинения:

К сожалению для размещения самостоятельно, отвечая на вопрос, но я не нашел какое-либо решение этой конкретной проблемы в Интернете, или на SO. Я также опубликую вышеупомянутое решение в качестве ответа, но оставлю его непринятым на какое-то время, если кто-то придумает более чистое решение. (т. е. тот, который может быть сделан, что все еще позволяет увеличить сборку zlib & bzip2 libs из исходного кода, но не требует каких-либо изменений для повышения или источника bzip2).

ответ

3

Простым решением, которое я нашел, было изменение libbz2.def, включенное в источник bzip2. А именно, удалить строку (как в bzip2 v1.0.6, это линия 1):

LIBRARY LIBBZ2 

Удаление этой линии устраняет жестко запрограммированный зависимость к DLL с именем «libbz2.dll». Затем это позволяет создавать расширенные библиотеки с именем boost_bzip2 * .dll и создавать файлы * .lib и * .exp для правильного разрешения соответствующей DLL, а также экспортировать все необходимые функции.

+0

Спасибо, что поделились этим. Действительно решает проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^