私のプロジェクトは、古いバージョンの Boost の iostreams w/bzip2 を使用していました。現在、Boost 1.51 にアップグレードしようとしています。最初は bzip でコンパイルしなかったので、明らかにリンカが libboost_bzip2-vc100-mt-sgd-1_51.lib が見つからないことを叫んでいました。次に、これらの指示に従って(そして static フラグを追加して)、このファイルをコンパイルしました。
ただし、リンカーを実行すると、不足している一連のシンボルが返されるようになりました。
>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)
...
ライブラリにこのコードがすべて含まれていない理由はありますか? 私は何が欠けていますか?WindowsでVS2010を使用しています。
編集:わかりました!
bzip なしでコンパイルされた libboost_iostreams-vc100-mt-sgd-1_51.lib の古いバージョンがありました。私がまだ確信していないのはこれです:私が使用した元の編集のために:
>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
元のコンパイルで iostream ライブラリが生成されなかったのはなぜですか? 非常に奇妙な。
ありがとう。