【问题标题】:boost synchronous client error [duplicate]boost同步客户端错误[重复]
【发布时间】:2013-03-18 20:14:00
【问题描述】:

我是 boost::asio 库的新手,在尝试这个基本的同步客户端时,它给出了这个错误

#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/shared_ptr.hpp>

using namespace std;


using namespace boost::asio;

int main()
{

    io_service service;
    ip::tcp::endpoint ep( ip::address::from_string("127.0.0.1"), 80);
    ip::tcp::socket sock(service);
    sock.connect(ep);


}

编译时出错,

[root@kris server]# g++ -o test1 test1.cpp
tmp/ccnLbhhW.o: In function `__static_initialization_and_destruction_0(int, int)':
test1.cpp:(.text+0x11b): undefined reference to `boost::system::get_system_category()'
test1.cpp:(.text+0x127): undefined reference to `boost::system::get_generic_category()'
test1.cpp:(.text+0x133): undefined reference to `boost::system::get_generic_category()'
test1.cpp:(.text+0x13f): undefined reference to `boost::system::get_generic_category()'
test1.cpp:(.text+0x14b): undefined reference to `boost::system::get_system_category()'
/tmp/ccnLbhhW.o: In function `boost::system::error_code::error_code()':
test1.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::get_system_category()'
/tmp/ccnLbhhW.o: In function `boost::asio::error::get_system_category()':
test1.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x5): undefined reference to `boost::system::get_system_category()'
/tmp/ccnLbhhW.o: In function `boost::asio::detail::posix_thread::~posix_thread()':
test1.cpp:(.text._ZN5boost4asio6detail12posix_threadD2Ev[_ZN5boost4asio6detail12posix_threadD5Ev]+0x26): undefined reference to `pthread_detach'
/tmp/ccnLbhhW.o: In function `boost::asio::detail::posix_thread::join()':
test1.cpp:(.text._ZN5boost4asio6detail12posix_thread4joinEv[boost::asio::detail::posix_thread::join()]+0x2b): undefined reference to `pthread_join'
/tmp/ccnLbhhW.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor<false> > >::context>::~posix_tss_ptr()':
test1.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEED5Ev]+0x15): undefined reference to `pthread_key_delete'
/tmp/ccnLbhhW.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor<false> > >::context>::posix_tss_ptr()':
test1.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEEC2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEEC5Ev]+0x28): undefined reference to `pthread_key_create'
collect2: ld returned 1 exit status

我在 centos 6.3 上使用以下库

boost-thread-1.41.0-11.el6_1.2.x86_64
boost-serialization-1.41.0-11.el6_1.2.x86_64
boost-test-1.41.0-11.el6_1.2.x86_64
boost-devel-1.41.0-11.el6_1.2.x86_64
boost-system-1.41.0-11.el6_1.2.x86_64
boost-wave-1.41.0-11.el6_1.2.x86_64
boost-iostreams-1.41.0-11.el6_1.2.x86_64
boost-filesystem-1.41.0-11.el6_1.2.x86_64
boost-python-1.41.0-11.el6_1.2.x86_64
boost-regex-1.41.0-11.el6_1.2.x86_64
boost-program-options-1.41.0-11.el6_1.2.x86_64
boost-date-time-1.41.0-11.el6_1.2.x86_64
boost-signals-1.41.0-11.el6_1.2.x86_64
boost-graph-1.41.0-11.el6_1.2.x86_64
boost-1.41.0-11.el6_1.2.x86_64

有什么想法吗?

更新:

运行

 [root@kris server]# g++ -o test1 test1.cpp -lboost_system

产生这个错误:

    /tmp/ccwHGnkt.o: In function `boost::asio::detail::posix_thread::~posix_thread()':
    test1.cpp:(.text._ZN5boost4asio6detail12posix_threadD2Ev[_ZN5boost4asio6detail12posix_threadD5Ev]+0x26): undefined reference to `pthread_detach'
    /tmp/ccwHGnkt.o: In function `boost::asio::detail::posix_thread::join()':
    test1.cpp:(.text._ZN5boost4asio6detail12posix_thread4joinEv[boost::asio::detail::posix_thread::join()]+0x2b): undefined reference to `pthread_join'
    /tmp/ccwHGnkt.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor<false> > >::context>::~posix_tss_ptr()':
    test1.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEED5Ev]+0x15): undefined reference to `pthread_key_delete'
    /tmp/ccwHGnkt.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor<false> > >::context>::posix_tss_ptr()':
    test1.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEEC2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceINS1_13epoll_reactorILb0EEEEEE7contextEEC5Ev]+0x28): undefined reference to `pthread_key_create'
    collect2: ld returned 1 exit status

【问题讨论】:

  • 为什么要以 root 用户身份构建?
  • 这些是链接器错误,而不是编译器错误。

标签: c++ linux boost


【解决方案1】:

您必须将-lboost_system-lpthread 添加到您的g++ 命令行,如下所示:

g++ -o test1 test1.cpp -lboost_system -lpthread

【讨论】:

  • 这个还是报错,我已经贴到上面了..
  • @krisdigitx 这意味着你也错过了pthread。答案已更新。
  • 是的,有效...并且编译正确
【解决方案2】:

您声称您正在“使用”所有这些库,但您的 g++ 行似乎不包含它们。

您必须告诉链接器应该将哪些目标文件和库链接在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多