使用Bazel构建基于Boost.Asio的应用时遭遇链接错误求助
使用Bazel构建基于Boost.Asio的应用时遭遇链接错误求助
我正在尝试用Bazel构建一个基于Boost.Asio的简单代码:
main.cpp
#include <boost/asio.hpp> #include <boost/asio/spawn.hpp> boost::asio::io_service io_service; void listenUDP(boost::asio::yield_context ctx) { boost::asio::ip::udp::endpoint ep(boost::asio::ip::udp::v4(), 1234); boost::asio::ip::udp::socket sock(io_service); char data[128]; for (;;) { std::size_t size = sock.async_receive(boost::asio::buffer(data, sizeof(data)), ctx); sock.async_send(boost::asio::buffer(data, size), ctx); } } int main() { boost::asio::spawn(io_service, &listenUDP); io_service.run(); return 0; }
MODULE.bazel
bazel_dep(name = "boost.asio", version = "1.83.0")
BUILD
cc_binary( name = "server", srcs = ["main.cpp"], deps = ["@boost.asio"] )
编译时我遇到了链接错误:
ld: Undefined symbols: boost::coroutines::stack_traits::default_size(), referenced from: _main in main.o boost::coroutines::stack_traits::is_unbounded(), referenced from: boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>::allocate(boost::coroutines::stack_context&, unsigned long) in main.o boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>::deallocate(boost::coroutines::stack_context&) in main.o boost::coroutines::stack_traits::maximum_size(), referenced from: boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>::allocate(boost::coroutines::stack_context&, unsigned long) in main.o boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>::deallocate(boost::coroutines::stack_context&) in main.o boost::coroutines::stack_traits::minimum_size(), referenced from: boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>::allocate(boost::coroutines::stack_context&, unsigned long) in main.o boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>::deallocate(boost::coroutines::stack_context&) in main.o boost::coroutines::detail::coroutine_context::jump(boost::coroutines::detail::coroutine_context&, void*), referenced from: boost::coroutines::detail::pull_coroutine_impl<void>::pull() in main.o boost::coroutines::detail::pull_coroutine_object<boost::coroutines::push_coroutine<void>, void, boost::asio::detail::spawned_coroutine_thread::entry_point<boost::asio::detail::old_spawn_entry_point<boost::asio::strand<boost::asio::io_context::basic_executor_type<std::__1::allocator<void>, 0ul>>, void (*)(boost::asio::basic_yield_context<boost::asio::any_io_executor>), void (*)()>>, boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>>::run() in main.o boost::coroutines::detail::push_coroutine_impl<void>::push() in main.o boost::coroutines::detail::pull_coroutine_object<boost::coroutines::push_coroutine<void>, void, boost::asio::detail::spawned_coroutine_thread::entry_point<boost::asio::detail::old_spawn_entry_point<boost::asio::strand<boost::asio::io_context::basic_executor_type<std::__1::allocator<void>, 0ul>>, void (*)(boost::asio::basic_yield_context<boost::asio::any_io_executor>), void (*)()>>, boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>>::deallocate_(boost::coroutines::detail::pull_coroutine_object<boost::coroutines::push_coroutine<void>, void, boost::asio::detail::spawned_coroutine_thread::entry_point<boost::asio::detail::old_spawn_entry_point<boost::asio::strand<boost::asio::io_context::basic_executor_type<std::__1::allocator<void>, 0ul>>, void (*)(boost::asio::basic_yield_context<boost::asio::any_io_executor>), void (*)()>>, boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>>*) in main.o boost::coroutines::detail::coroutine_context::coroutine_context(void (*)(boost::context::detail::transfer_t), boost::coroutines::detail::preallocated const&), referenced from: boost::coroutines::pull_coroutine<void>::pull_coroutine<boost::asio::detail::spawned_coroutine_thread::entry_point<boost::asio::detail::old_spawn_entry_point<boost::asio::strand<boost::asio::io_context::basic_executor_type<std::__1::allocator<void>, 0ul>>, void (*)(boost::asio::basic_yield_context<boost::asio::any_io_executor>), void (*)()>>>(boost::asio::detail::spawned_coroutine_thread::entry_point<boost::asio::detail::old_spawn_entry_point<boost::asio::strand<boost::asio::io_context::basic_executor_type<std::__1::allocator<void>, 0ul>>, void (*)(boost::asio::basic_yield_context<boost::asio::any_io_executor>), void (*)()>>&&, boost::coroutines::attributes const&) in main.o boost::coroutines::detail::coroutine_context::coroutine_context(), referenced from: boost::coroutines::pull_coroutine<void>::pull_coroutine<boost::asio::detail::spawned_coroutine_thread::entry_point<boost::asio::detail::old_spawn_entry_point<boost::asio::strand<boost::asio::io_context::basic_executor_type<std::__1::allocator<void>, 0ul>>, void (*)(boost::asio::basic_yield_context<boost::asio::any_io_executor>), void (*)()>>>(boost::asio::detail::spawned_coroutine_thread::entry_point<boost::asio::detail::old_spawn_entry_point<boost::asio::strand<boost::asio::io_context::basic_executor_type<std::__1::allocator<void>, 0ul>>, void (*)(boost::asio::basic_yield_context<boost::asio::any_io_executor>), void (*)()>>&&, boost::coroutines::attributes const&) in main.o clang: error: linker command failed with exit code 1 (use -v to see invocation)
我哪里做错了?Boost是通过bazel_dep安装的,我没有手动安装或者添加任何额外的链接选项
设备信息:Macbook M1 MAX (ARM)
尝试编译但遇到了上述错误
备注:内容来源于stack exchange,提问作者Алексей Кулдошин
相关产品推荐
相关产品推荐

