首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Io_context的未定义符号:最新boost库的链接错误

Io_context的未定义符号:最新boost库的链接错误
EN

Stack Overflow用户
提问于 2018-09-18 07:14:23
回答 1查看 240关注 0票数 1

我的代码以前拷贝得很好,直到boost库使用changes in asio进行了更新。在我的代码中,我定义了一个变量:boost::shared_ptr<Face> face(boost::make_shared<ThreadsafeFace>(io_service));,可以看到,它以io_service作为构造函数。FaceThreadsafeFace是一个library类,我的应用程序链接到。这个问题发生在我的二进制文件的链接阶段,在那里我得到了undefined symbols错误:

代码语言:javascript
运行
复制
Undefined symbols for architecture x86_64:
  "ndn::ThreadsafeFace::ThreadsafeFace(boost::asio::io_context&)", referenced from:
      boost::detail::sp_if_not_array<ndn::ThreadsafeFace>::type boost::make_shared<ndn::ThreadsafeFace, boost::asio::io_context&>(boost::asio::io_context&&&) in ndnrtc_client-main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

可以看出,链接器找不到接受boost::asio::io_context&参数的ThreadsafeFace的构造函数。而且it 不会 --因为库不提供这样的库。唯一提供的库是使用io_service参数。现在,我不太明白这个构造函数定义是从哪里来的,因为我的代码和库的代码都没有这个定义。

这让我想到,使用新的boost (我正在使用自制的macOS链接到1.67 ),io_service会自动被io_context替换(在预处理过程中?),从而导致问题。

我尝试在编译代码时提供-DBOOST_ASIO_ENABLE_OLD_SERVICES,但它也没有帮助。

我应该在库更新之前降级boost版本吗?

UPDATE我已经运行了clang preprocessing (clang++ -E ...),并在输出中找到了以下内容:

代码语言:javascript
运行
复制
# 21 "/usr/local/include/boost/asio/io_service.hpp" 2 3

namespace boost {
namespace asio {



typedef io_context io_service;


}
}

这使得所有的io_service变量实际上都是io_context,这肯定会让人头疼。

EN

回答 1

Stack Overflow用户

发布于 2018-09-18 07:56:15

“确认所有的io_service变量实际上都是io_context,这肯定会让人头疼。”

事实上,这保证了不会令人头疼。Typedefs是别名:它们是完全相同的。因此,io_service只是指同一类型的另一种方式,即使拼写在某些地方恰好不同。这实际上就是你需要的。

正在阅读消息:

这告诉您ndn::ThreadsafeFace 确实提供了所需的构造函数,因为它是从您的代码中引用的。如果没有提供,它将是一个编译错误,而不是一个链接错误。

所以你的问题是不同的。您可能缺少链接器输入,或者您链接到的库对象是以/以不同方式/编译的方式编译的,因此当您包含声明ThreadsafeFace的头时,它不会提供所声明的构造函数的定义。

通常,如果名称空间发生变化,或者当您(Ab)使用编译器定义来更改代码的含义时,就会发生这种情况(您是不是搞错了像#define io_context io_service这样的东西?因为那个是一个头痛的秘方)。

注当您在编译代码时与编译库时使用不同的编译器版本/标志时,甚至会导致链接器错误。

有关更多故障排除提示,请参阅:What is an undefined reference/unresolved external symbol error and how do I fix it?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52376834

复制
相关文章

相似问题

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