Boost c++代码不构建,有人可以帮助我与库链接

Boost C++ code not building, can someone help me with library linking?

本文关键字:帮助 链接 代码 c++ 构建 Boost      更新时间:2023-10-16

我从这里开始使用Boost和教程底部的示例设置Eclipse安装,以测试编译工作。我试图使用asio套接字,但我在编译时收到以下内容:

**** Build of configuration Debug for project Client ****
**** Internal Builder is used for build               ****
g++ -IC:MinGWBoostincludeboost-1_53 -O0 -g3 -Wall -c -fmessage-length=0 -o srcClient.o ..srcClient.cpp
g++ -LC:MinGWBoostlib -o Client.exe srcClient.o
srcClient.o: In function `__static_initialization_and_destruction_0':
C:/MinGW/Boost/include/boost-1_53/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
C:/MinGW/Boost/include/boost-1_53/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
C:/MinGW/Boost/include/boost-1_53/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
srcClient.o: In function `boost::system::error_code::error_code()':
C:/MinGW/Boost/include/boost-1_53/boost/system/error_code.hpp:315: undefined reference to `boost::system::system_category()'
srcClient.o: In function `boost::asio::error::get_system_category()':
C:/MinGW/Boost/include/boost-1_53/boost/asio/error.hpp:216: undefined reference to `boost::system::system_category()'
srcClient.o: In function `boost::asio::detail::winsock_init_base::startup(boost::asio::detail::winsock_init_base::data&, unsigned char, unsigned char)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/winsock_init.ipp:39: undefined reference to `__imp_WSAStartup'
srcClient.o: In function `boost::asio::detail::winsock_init_base::cleanup(boost::asio::detail::winsock_init_base::data&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/winsock_init.ipp:48: undefined reference to `__imp_WSACleanup'
srcClient.o: In function `boost::asio::detail::socket_ops::clear_last_error()':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:51: undefined reference to `__imp_WSASetLastError'
srcClient.o: In function `boost::asio::detail::socket_ops::close(unsigned long long, unsigned char&, bool, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:297: undefined reference to `__imp_closesocket'
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:314: undefined reference to `__imp_ioctlsocket'
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:329: undefined reference to `__imp_closesocket'
srcClient.o: In function `boost::asio::detail::socket_ops::recv(unsigned long long, _WSABUF*, unsigned long long, int, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:683: undefined reference to `__imp_WSARecv'
srcClient.o: In function `boost::asio::detail::socket_ops::send(unsigned long long, _WSABUF const*, unsigned long long, int, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:1066: undefined reference to `__imp_WSASend'
srcClient.o: In function `boost::asio::detail::socket_ops::socket(int, int, int, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:1294: undefined reference to `__imp_WSASocketA'
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:1305: undefined reference to `__imp_setsockopt'
srcClient.o: In function `boost::asio::detail::socket_ops::poll_read(unsigned long long, unsigned char, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:1716: undefined reference to `__imp_select'
srcClient.o: In function `boost::asio::detail::socket_ops::poll_connect(unsigned long long, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:1797: undefined reference to `__imp_select'
srcClient.o: In function `boost::asio::detail::socket_ops::translate_addrinfo_error(int)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:2869: undefined reference to `__imp_WSAGetLastError'
srcClient.o: In function `boost::asio::detail::socket_ops::getaddrinfo(char const*, char const*, addrinfo const&, addrinfo**, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:2887: undefined reference to `__imp_getaddrinfo'
srcClient.o: In function `boost::asio::detail::socket_ops::freeaddrinfo(addrinfo*)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:2930: undefined reference to `__imp_freeaddrinfo'
srcClient.o: In function `unsigned long long boost::asio::detail::socket_ops::error_wrapper<unsigned long long>(unsigned long long, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:62: undefined reference to `__imp_WSAGetLastError'
srcClient.o: In function `int boost::asio::detail::socket_ops::error_wrapper<int>(int, boost::system::error_code&)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:62: undefined reference to `__imp_WSAGetLastError'
srcClient.o: In function `int boost::asio::detail::socket_ops::call_connect<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, sockaddr const*, unsigned long long)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:452: undefined reference to `__imp_connect'
srcClient.o: In function `int boost::asio::detail::socket_ops::call_setsockopt<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, int, int, void const*, unsigned long long)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:1340: undefined reference to `__imp_setsockopt'
srcClient.o: In function `int boost::asio::detail::socket_ops::call_getsockopt<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, int, int, void*, unsigned long long*)':
C:/MinGW/Boost/include/boost-1_53/boost/asio/detail/impl/socket_ops.ipp:1426: undefined reference to `__imp_getsockopt'
collect2.exe: error: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 4033  ms.  

我假设我在连接库时出错了。谁能解释一下那个教程的作者说

是什么意思?
Under libraries, add the specific boost libraries you need. 
For example I have added:
boost_thread-mgw47-mt-d-1_52
boost_system-mgw47-mt-d-1_52

并解释(详细)如何在Eclipse中进行此操作(用于调试和发布)?谢谢。

哦,如果你想要代码,它只是在这里找到的代码。

您得到的错误确实是链接错误,因为缺少库(可能是您列出的库)。

快速搜索得到这两个SO条目:

  • 如何在eclipse c项目中添加库

  • c++: CDT的外部库

请注意,在某些版本的eclipse/CDT中,符号&路径配置窗口,但它似乎并不是在所有版本中都存在,所以你必须求助于链接器配置面板,正如上面链接的答案所解释的那样。

如果您从您在问题中链接的同一站点(关于设置eclipse和cdt的站点)中浏览了之前的教程,并设法编译了示例程序,那么2个boost库是唯一缺失的。否则,您可能需要添加其他一些符号(错误消息中缺少的一些符号属于winsock系统库)。