14

私のプロジェクトは、古いバージョンの 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 ライブラリが生成されなかったのはなぜですか? 非常に奇妙な。

ありがとう。

4

1 に答える 1