首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有接收器的boost_log示例无法编译

带有接收器的boost_log示例无法编译
EN

Stack Overflow用户
提问于 2014-08-10 17:36:55
回答 3查看 3.9K关注 0票数 10

我考虑在一个项目中使用boost_log,一开始我就遇到了以下问题。

Boost日志示例:file.cpp无法编译。我编译的其他更简单的示例(没有接收器)没有问题。

代码语言:javascript
复制
g++ -std=c++11 boost_log_sinks.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lpthread

/usr/bin/ ld : /tmp/ccApJdsi.o:对符号‘//usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0:’的未定义引用添加符号: DSO缺少命令行collect2: collect2:ld返回1退出状态

我正在开发Ubuntu14.04,我的g++版本是g++ (Ubuntu4.8.2-19ubuntu1) 4.8.2

有人知道为什么会这样吗?

EN

回答 3

Stack Overflow用户

发布于 2014-09-10 02:59:30

您必须手动链接boost_thread:

代码语言:javascript
复制
g++ -std=c++11 boost_log_sinks.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lboost_thread -lpthread
票数 8
EN

Stack Overflow用户

发布于 2017-07-06 09:35:21

boost_log库使用来自其他boost库的特性。不幸的是,文档未能指出哪些库是这些库。因此,每当您使用这些特性之一时,都需要链接到该特性所在的相应库,或者得到错误消息:

对符号的未定义引用

我使用的解决方案是循环所有boost库来搜索该符号(在您的例子中是_ZN5boost6detail12get_tss_dataEPKv)。

在Ubuntu17.04中,boost库存储在/usr/lib/x86_64-linux-gnu/libboost_*

因此,使用以下脚本:

代码语言:javascript
复制
for i in /usr/lib/x86_64-linux-gnu/libboost_*
do
   echo $i
   nm $i|grep _ZN5boost6detail12get_tss_dataEPKv
done

您可以得到使用符号(U)的库列表,例如:

代码语言:javascript
复制
/usr/lib/x86_64-linux-gnu/libboost_log.a
                 U _ZN5boost6detail12get_tss_dataEPKv
                 U _ZN5boost6detail12get_tss_dataEPKv
                 U _ZN5boost6detail12get_tss_dataEPKv
/usr/lib/x86_64-linux-gnu/libboost_log_setup.a
                 U _ZN5boost6detail12get_tss_dataEPKv

或定义(T),例如:

代码语言:javascript
复制
/usr/lib/x86_64-linux-gnu/libboost_thread.a
0000000000000740 T _ZN5boost6detail12get_tss_dataEPKv

最后一个是你需要的。它告诉您正在寻找的符号在库libboost_thread.a中。所以,现在要做的就是在链接命令中包含这个lib:

代码语言:javascript
复制
g++ -std=c++11 boost_log_sinks.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lboost_thread -lpthread
票数 3
EN

Stack Overflow用户

发布于 2019-12-09 11:55:20

要编译示例file.cpp,在Ubuntu中,我必须对所有这些库使用编译:

代码语言:javascript
复制
$ c++ -DBOOST_LOG_DYN_LINK tutorial_file.cpp \
-lboost_log_setup -lboost_log -lboost_thread -lpthread -lboost_system
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25231295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档