我正在通过Visual Studio Linux项目遇到编译ASIO代码的问题。我不断收到以下链接错误:
链接对象
1> d: c test_beastboost test_beastboost obj x64 debug main.o:错误: :在函数中
boost::asio::detail::posix_event::posix_event()': 1>/usr/local/include/boost/asio/detail/impl/posix_event.ipp(42): error : undefined reference to
pthread_condattr_setclock' 1> d: c test_beastboost test_beastboost obj x64 debug main.o:错误 :在函数boost::asio::detail::posix_thread::~posix_thread()': 1>/usr/local/include/boost/asio/detail/impl/posix_thread.ipp(35): error : undefined reference to
pthread_detach' 1> d: c test_beastboost test_beastboost obj x64 debug main.o:错误 :在函数中boost::asio::detail::posix_thread::join()': 1>/usr/local/include/boost/asio/detail/impl/posix_thread.ipp(42): error : undefined reference to
pthread_join' 1> d: c test_beastboost test_beastboost obj x64 debug main.o:错误 :在功能中boost::asio::detail::posix_thread::start_thread(boost::asio::detail::posix_thread::func_base*)': 1>/usr/local/include/boost/asio/detail/impl/posix_thread.ipp(60): error : undefined reference to
pthread_create' 1> d: c test_beastboost test_beastboost obj x64 debug main.o:错误 :在功能中boost::asio::detail::posix_signal_blocker::posix_signal_blocker()': 1>/usr/local/include/boost/asio/detail/posix_signal_blocker.hpp(43): error : undefined reference to
pthread_sigmask' 1> d: c test_beastboost test_beastboost obj x64 debug main.o:错误 :在功能中boost::asio::detail::posix_signal_blocker::~posix_signal_blocker()': 1>/usr/local/include/boost/asio/detail/posix_signal_blocker.hpp(50): error : undefined reference to
pthread_sigmask' 1> d: c test_beastboost test_beastboost obj x64 debug main.o:错误 :在函数中std::thread::thread<std::_Bind<void (*(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>))(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>&)>>(std::_Bind<void (*(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>))(boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::executor>&)>&&)': 1>/usr/include/c++/5/thread(137): error : undefined reference to
pthread_create'1> collect2:错误:ld 返回1个退出状态
我已经编译了Boost 1_70,它们位于USR/LOCAL/INCLUCE/BOOST和USR/LOCAL/LIB内。
对于我的链接器,我有以下内容:
-l/usr/local/lib/-lboostrongystem
我也尝试添加-lboost_thread,但无论如何我都在使用标准库线程。
有什么建议吗?
我应该在Ubuntu上重新编译我的提升。
如果您正在使用cmake编译项目,则可以在您的cmakelists.txt文件中使用以下内容:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
FIND_PACKAGE( Boost 1.70 COMPONENTS REQUIRED date_time)
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
ADD_EXECUTABLE( exe cpp.cpp )
target_include_directories(exe PRIVATE ${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES( exe LINK_PUBLIC ${Boost_LIBRARIES} )
install(TARGETS exe RUNTIME DESTINATION bin)
这至少应该修复bug。
,如果您不使用vscode使用cmake,我建议您观看如何从 vector-of-Bool