2011-01-04 6 views
5

最近、zlib & bzip2圧縮フィルタの両方のiostreamをサポートしているウィンドウで、ブーストバージョン1.44.0を作成しました。さまざまな理由から、zlib & bzip2ライブラリの両方をソースからビルドすることが可能になることが決定されました。それが価値あるものだが、私はそれが重要だとは思わない、私が使用しているMSVCのバージョンはVC9(VS2008)である。また、私の表面的な検査では、この問題はWindows上でbzip2に対して構築されたiostreamを持つすべてのバージョンのブーストに適用されることに注意してください。Windows上のソースからビルドされたbzip2のiostreamを追加しました

ブーストは、-sZLIB_SOURCE=<PATH>-sBZIP2_SOURCE=<PATH>を指定して正常に構築されます。しかし、boost_iostreams * .dllのlibsは存在しなかったlibbz2.dll(boost_bzip2 * .dllの代わりに)に依存していたことに気付きました。 Boostは、しかし、成功裏にboost_bzip2 * .dllを構築しました。私はワイルドカードをすべてのビルドバリアント情報のプレースホルダとして使用しています。

問題:

どこかlibbz2.dllにハードコーディングされた依存性が存在します。

ソリューション:

私が見つけた最も簡単な解決策は、BZIP2ソースに含まlibbz2.def修正しました。すなわち、(BZIP2 v1.0.6デベロッパーのとして、それがライン1である)の行を削除します。

LIBRARY   LIBBZ2 

この行を削除するには、「libbz2.dll」という名前のDLLにハードコードされた依存関係を排除します。これにより、boost_bzip2 * .dllという名前のブーストビルドライブラリが生成され、* .libと* .expファイルが生成され、対応する名前のDLLに解決され、必要なすべての関数がエクスポートされます。

謝罪:自己答える質問を投稿するための

申し訳ありませんが、私は、インターネット上でこの特定の問題への解決策を見つける、またはSOにしませんでした。また、私は上記の解決策を回答として掲示しますが、誰かがよりクリーンな解決策を提示する場合には、しばらくそれを受け入れないままにしておきます。 (つまり、ブーストでソースからzlib & bzip2ライブラリを構築できますが、ソースをブーストまたはbzip2に変更する必要はありません)。

答えて

3

私が見つけた最も簡単な解決策は、bzip2ソースに含まれているlibbz2.defを修正することでした。すなわち、(BZIP2 v1.0.6デベロッパーのとして、それがライン1である)の行を削除します。

LIBRARY LIBBZ2 

この行を削除するには、「libbz2.dll」という名前のDLLにハードコードされた依存関係を排除します。これにより、boost_bzip2 * .dllという名前のブーストビルドライブラリが生成され、* .libと* .expファイルが対応するDLLに適切に解決され、必要なすべての機能がエクスポートされます。

+0

ありがとうございます。確かに問題を解決します。 –

関連する問題