boost.log 的使用

在编译boost.log 的示例程序时,遇到了下面的错误:

zhifan$ make boost_log LDFLAGS='-lboost_log-mt'

Undefined symbols for architecture x86_64:
"boost::log::v2s_mt_posix::record_view::public_data::destroy(boost::log::v2s_mt_posix::record_view::public_data const*)", referenced from:
....

原因是因为如果使用动态连接就必须同时在编译和连接阶段使用-DBOOST_LOG_DYN_LINK 选项。 详细信息参看:
http://www.boost.org/doc/libs/1_56_0/libs/log/doc/html/log/installation/config.html


简单来说:
如果想使用动态链接, 需要使用-DBOOST_LOG_DYN_LINK -lboost_log-mt, 如果编译和链接是分开的, 在编译阶段也需要-DBOOST_LOG_DYN_LINK
如果想使用静态链接, 可以使用/usr/local/lib/libboost_log-mt.a /usr/local/lib/libboost_thread-mt.a /usr/local/lib/libboost_system-mt.a

下面的编译方式在boost 149 下测试通过。


动态链接

zhifan$ make boost_log CXXFLAGS='-DBOOST_LOG_DYN_LINK -lboost_log-mt'
c++ -DBOOST_LOG_DYN_LINK -lboost_log-mt -ggdb -std=c++11 boost_log.cc -o boost_log
zhifan$ otool -L boost_log
boost_log:
/usr/local/lib/libboost_log-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

或者:

zhifan$ c++ -DBOOST_LOG_DYN_LINK -ggdb -std=c++11 -c -o boost_log.o boost_log.cc
zhifan$ c++ -DBOOST_LOG_DYN_LINK -ggdb -std=c++11 -o boost_log boost_log.o -lboost_log-mt

下面方式是不行的

zhifan$ c++ -ggdb -std=c++11 -c -o boost_log.o boost_log.cc
zhifan$ c++ -DBOOST_LOG_DYN_LINK -ggdb -std=c++11 -o boost_log boost_log.o -lboost_log-mt
Undefined symbols for architecture x86_64:
"boost::log::v2s_mt_posix::record_view::public_data::destroy(boost::log::v2s_mt_posix::record_view::public_data const*)", referenced from:

 

静态链接

zhifan$ make boost_log LDFLAGS='/usr/local/lib/libboost_log-mt.a /usr/local/lib/libboost_thread-mt.a /usr/local/lib/libboost_system-mt.a'
c++ -ggdb -std=c++11 /usr/local/lib/libboost_log-mt.a /usr/local/lib/libboost_thread-mt.a /usr/local/lib/libboost_system-mt.a boost_log.cc -o boost_log
zhifan$ otool -L boost_log
boost_log:
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

或者:

zhifan$ c++ -ggdb -std=c++11 -c -o boost_log.o boost_log.cc
zhifan$ c++ -ggdb -std=c++11 /usr/local/lib/libboost_log-mt.a -lboost_thread-mt /usr/local/lib/libboost_system-mt.a boost_log.o -o boost_log


参考文档
http://www.boost.org/doc/libs/1_56_0/libs/log/example/doc/tutorial_trivial.cpp

http://www.boost.org/doc/libs/1_56_0/libs/log/doc/html/log/installation/config.html

 

转载于:https://www.cnblogs.com/zhfan/p/4069899.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值