Мой проект использовал более старую версию Boost’s iostreams с bzip2. Я сейчас пытаюсь обновить до Boost 1.51. Сначала я не компилировал с помощью bzip, поэтому, очевидно, я получил компоновщик, кричащий об отсутствии libboost_bzip2-vc100-mt-sgd-1_51.lib. Затем я последовал эти инструкции (и добавил статический флаг), чтобы скомпилировать этот файл.
Тем не менее, запуск компоновщика теперь возвращает несколько пропущенных символов:
>error LNK2001: unresolved external symbol "protected: __thiscall boost::iostreams::detail::bzip2_base::~bzip2_base(void)" (??1bzip2_base@detail@iostreams@boost@@IAE@XZ)
>error LNK2001: unresolved external symbol "protected: __thiscall boost::iostreams::detail::bzip2_base::bzip2_base(struct boost::iostreams::bzip2_params const &)" (??0bzip2_base@detail@iostreams@boost@@IAE@ABUbzip2_params@23@@Z)
>error LNK2001: unresolved external symbol "int const boost::iostreams::bzip2::stream_end" (?stream_end@bzip2@iostreams@boost@@3HB)
...
Есть идеи, почему библиотека не содержит всего этого кода? Что мне не хватает?
Я использую VS2010 на Windows.
Редактировать: Понял!
Была старая версия libboost_iostreams-vc100-mt-sgd-1_51.lib, которая была скомпилирована без bzip. В чем я до сих пор не уверен, так это в следующем исходном варианте:
>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 -sZLIB_SOURCE=d:\work\external\zlib-1.2.3 runtime-link=static
Это произвело следующие файлы:
libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
Для «правильной» компиляции (которая решила проблему) я использовал:
>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static
То есть просто удалил zlib, так как это было мне ненужно. Это произвело:
libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
libboost_iostreams-vc100-mt-s-1_51.lib
libboost_iostreams-vc100-mt-sgd-1_51.lib
Как получилось, что iostreams libs не были созданы в оригинальном сборнике? Очень странно.
Благодарю.
Из ответа Е.К. на вопрос:
Была старая версия libboost_iostreams-vc100-mt-sgd-1_51.lib, которая была скомпилирована без bzip. В чем я до сих пор не уверен, так это в следующем исходном варианте:
>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 -sZLIB_SOURCE=d:\work\external\zlib-1.2.3 runtime-link=static
Это произвело следующие файлы:
libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
Для «правильной» компиляции (которая решила проблему) я использовал:
>b2 --with-iostreams -sBZIP2_SOURCE=D:\Work\external\bzip2-1.0.6 runtime-link=static
То есть просто удалил zlib, так как это было мне ненужно. Это произвело:
libboost_bzip2-vc100-mt-s-1_51.lib
libboost_bzip2-vc100-mt-sgd-1_51.lib
libboost_iostreams-vc100-mt-s-1_51.lib
libboost_iostreams-vc100-mt-sgd-1_51.lib
Как получилось, что iostreams libs не были созданы в оригинальном сборнике? Очень странно.
Других решений пока нет …