1

ここのブーストログチュートリアルに従いました http://boost-log.sourceforge.net/libs/log/doc/html/index.html

このサンプルをコンパイルして実行しようとしています

//[ example_tutorial_trivial
#include <boost/log/trivial.hpp>

int main(int, char*[])
{
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";

return 0;
}

コンパイルできません。エラーはhttp://pastebin.com/DcLdWGkeとして返されます

次に、コードを次のように編集します。

#define BOOST_LOG_DYN_LINK
//[ example_tutorial_trivial
#include <boost/log/trivial.hpp>

int main(int, char*[])
{
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";

return 0;
}

今では準拠し、うまく機能しました。ブーストサイトでこのマクロについて読みました:

ユーザー コードで定義されている場合、ライブラリはバイナリが動的に読み込まれるライブラリ ("dll" または "so") としてビルドされていると想定します。それ以外の場合、ライブラリは静的モードで構築されていると見なされます。このマクロは、ログを使用するユーザー アプリケーションのすべての翻訳単位に対して、定義されているか定義されていない必要があります。このマクロは、それをサポートするプラットフォームでの自動リンクに役立ちます。

だから私の質問は: なぜ私は #define BOOST_LOG_DYN_LINK をコンパイルする必要があるのですか?

4

1 に答える 1

0

#define BOOST_LOG_DYN_LINK

独自の別のソースを持つすべてのライブラリを、静的ライブラリではなく dll としてリンクするように強制します。

参考:\boost_1_xx_0\boost\config\user.hpp詳細は

ブーストを構成するには、ユーザー構成ヘッダーを使用します<boost/config/user.hpp>

于 2013-10-08T15:23:26.140 に答える