提升日志宏解释

时间:2013-10-08 15:18:53

标签: c++ boost boost-log

我在这里按照提升日志教程 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;
}

现在它符合并运作良好。我在增强网站上阅读了关于这个marcro的信息:

  

如果在用户代码中定义,则库将假定构建了二进制文件   作为动态加载的库(“dll”或“so”)。否则就是   假设库是以静态模式构建的。这个宏一定是   为用户的所有翻译单元定义或未定义   使用记录的应用程序。此宏可以帮助自动链接   在支持它的平台上。

所以我的问题是:为什么我需要#define BOOST_LOG_DYN_LINK进行编译?

1 个答案:

答案 0 :(得分:0)

#define BOOST_LOG_DYN_LINK

会强制所有拥有独立源代码的库被链接为dll而不是静态库。

参考:\boost_1_xx_0\boost\config\user.hpp了解详情

要配置boost,请使用用户配置标头<boost/config/user.hpp>