【问题标题】:How to g++ a C++ program using boost/asio.hpp file?如何使用 boost/asio.hpp 文件 g++ 一个 C++ 程序?
【发布时间】:2014-01-25 03:27:23
【问题描述】:

我有以下示例程序

http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/example/http/client/sync_client.cpp

当我执行时,我得到这个错误..

$ g++ sync_client.cpp -I usr/include/boost

/tmp/cc3eDbiW.o: In function `__static_initialization_and_destruction_0(int, int)':
sync_client.cpp:(.text+0xd61): undefined reference to `boost::system::generic_category()'
sync_client.cpp:(.text+0xd6d): undefined reference to `boost::system::generic_category()'
sync_client.cpp:(.text+0xd79): undefined reference to `boost::system::system_category()'
/tmp/cc3eDbiW.o: In function `boost::system::error_code::error_code()':
sync_client.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()'
/tmp/cc3eDbiW.o: In function `boost::asio::error::get_system_category()':
sync_client.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x5): undefined reference to `boost::system::system_category()'
/tmp/cc3eDbiW.o: In function `boost::asio::detail::posix_tss_ptr_create(unsigned int&)':
sync_client.cpp:(.text._ZN5boost4asio6detail20posix_tss_ptr_createERj[boost::asio::detail::posix_tss_ptr_create(unsigned int&)]+0x19): undefined reference to `pthread_key_create'
/tmp/cc3eDbiW.o: In function `boost::asio::detail::posix_thread::~posix_thread()':
sync_client.cpp:(.text._ZN5boost4asio6detail12posix_threadD2Ev[_ZN5boost4asio6detail12posix_threadD5Ev]+0x26): undefined reference to `pthread_detach'
/tmp/cc3eDbiW.o: In function `boost::asio::detail::posix_thread::join()':
sync_client.cpp:(.text._ZN5boost4asio6detail12posix_thread4joinEv[boost::asio::detail::posix_thread::join()]+0x2b): undefined reference to `pthread_join'
/tmp/cc3eDbiW.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::task_io_service>::context>::~posix_tss_ptr()':
sync_client.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_15task_io_serviceEE7contextEED5Ev]+0x15): undefined reference to `pthread_key_delete'
/tmp/cc3eDbiW.o: In function `boost::asio::detail::posix_tss_ptr<boost::asio::detail::call_stack<boost::asio::detail::strand_service::strand_impl>::context>::~posix_tss_ptr()':
sync_client.cpp:(.text._ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED2Ev[_ZN5boost4asio6detail13posix_tss_ptrINS1_10call_stackINS1_14strand_service11strand_implEE7contextEED5Ev]+0x15): undefined reference to `pthread_key_delete'
collect2: ld returned 1 exit status

什么是正确的编译器命令?

【问题讨论】:

  • 您仍在使用 Boost 1.45 有什么特别好的理由吗?那已经超过 3 岁了......
  • 什么是 IDE?有标志告诉它去哪里捡东西
  • 不,示例来自 boost 1.45 我认为我使用的是 1.55
  • 你试过普通的 gcc 吗?它应该形成对 g++ 的正确调用

标签: c++ boost


【解决方案1】:
g++ sync_client.cpp -lboost_iostreams -lboost_system -o sync_client

然后:

./sync_client

您可能需要在编译命令中添加-lpthread,看来您的LD_LIBRARY_PATHld.so.conf 配置不正确。

注意:不需要在命令行中添加-I /usr/include/boost

更新:

命令ls -l /usr/lib/libboost_iostreams* 应该输出如下内容:

... /usr/lib/libboost_iostreams.so -> libboost_iostreams.so.1.55.0*
... /usr/lib/libboost_iostreams.so.1.55.0*

如果是这种情况,请尝试运行sudo ldconfig

【讨论】:

  • 这是它找不到 boost_iostreams 或 boost_system 的问题。我使用了 apt-get 并从源代码编译了 libboost-dev
  • 尝试安装libboost-all-dev,不需要从源安装,顺便说一句。
  • 对不起,我确实安装了 libboost-all-dev。我的 ld.so.conf 是这样的:包括 /etc/ld.so.conf.d/*.conf 和 LD_LIBRARY_PATH 没有设置
  • 检查将-I /usr/local/include -L/usr/local/lib/ 添加到命令行。从源安装通常使用/usr/local 作为/usr 的安装根目录。
  • 我通过 apt-get install libboost-system-dev 然后 apt-get install libboost-thread-dev 然后 g++ sync_client -lboost_system -pthread 解决了这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2021-08-02
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多