1

さまざまなことに利用するコードをテストしようとしていますboost::filesystem
vc11 用のブースト 1.51 の静的バージョンをビルドしたところ、意図したライブラリが期待どおりに出力されました。

使用したフラグは次のとおりです。
b2 --with-filesystem --build-type=complete --build-dir=.\build link=static runtime-link=static

そして、生成されたファイルのリストは次のとおりです。

libboost_filesystem-vc110-mt-s-1_51.lib
libboost_filesystem-vc110-mt-sgd-1_51.lib
libboost_filesystem-vc110-s-1_51.lib
libboost_filesystem-vc110-sgd-1_51.lib
libboost_system-vc110-mt-s-1_51.lib
libboost_system-vc110-mt-sgd-1_51.lib
libboost_system-vc110-s-1_51.lib
libboost_system-vc110-sgd-1_51.lib


次に、新しいWin32 DLLプロジェクトを作成し、適切な include/lib ディレクトリを追加しました。
しかし、コンパイルしようとすると、次の出力が得られます。

LNK1104: cannot open file 'libboost_filesystem-vc110-mt-gd-1_51.lib

しかし、このファイルは存在しませんこれは、ライブラリの静的バージョンではないためです...
プロジェクトのどこにもDLLバージョンへのリンクを要求したことがないため、これは奇妙です!

では、なぜ私のプロジェクトは、私が使用するように頼んだことのないライブラリについて不平を言っているのでしょうか?
ブースト ヘッダーは、対応するライブラリに対して自動的にリンクしようとしますか?
の静的なシングル スレッド バージョンを使用することをブーストに伝えるために設定する必要がある、ある種のプリプロセッサ フラグはありboost::filesystemますか?

アップデート:

コメントで、ブースト実際にそれをサポートするコンパイラの自動リンクを試みていることを通知されました<boost/config/auto_link.hpp>...ブーストの静的(デバッグ)および(リリース)バージョン
を使用するようにこれらのヘッダーを適切に構成するためのいくつかの試みの後、まだこのエラーが発生しています。したがって、この機能を適切に構成または無効にする 方法を誰かが教えてくれたら、それを回答としてマークします。また、適切なライブラリであると 仮定するのは正しいですか?/MDd/MD


libboost_filesystem-vc110-s-1_51.liblibboost_filesystem-vc110-sgd-1_51.lib/MD/MDd

ありがとう!

4

1 に答える 1

2

自動リンクを無効にするには、 を定義する必要がありますBOOST_ALL_NO_LIB。ブーストのドキュメントから:

// BOOST_ALL_NO_LIB: Tells the config system not to automatically select 
// which libraries to link against.  
// Normally if a compiler supports #pragma lib, then the correct library 
// build variant will be automatically selected and linked against, 
// simply by the act of including one of that library's headers.  
// This macro turns that feature off.

しかし、そうしないでください。問題は解決しません。通常、自動リンクは正しいです。つまり、間違ったライブラリにリンクしているか、プリプロセッサ マクロを正しく構成していません。リンカーが共有ライブラリにリンクしたい場合、BOOST_ALL_DYN_LINKorBOOST_FILE_SYSTEM_DYN_LINKとを定義したと思いますBOOST_SYSTEM_DYN_LINK。それを削除すると、問題なくリンクするはずです。

于 2013-06-06T13:18:48.620 に答える