最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c++ - Build application with Boost.asio using Bazel - Stack Overflow

programmeradmin1浏览0评论

I am trying to build simple code with boost.asio using Bazel:

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"]
)

I receive errors during linking:

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)

What am I doing wrong? Boost is installed by bazel_dep, I don't install it manually or add any extra linker options

Device: Macbook M1 MAX (ARM)

Tried to compile but receive an error

I am trying to build simple code with boost.asio using Bazel:

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"]
)

I receive errors during linking:

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)

What am I doing wrong? Boost is installed by bazel_dep, I don't install it manually or add any extra linker options

Device: Macbook M1 MAX (ARM)

Tried to compile but receive an error

Share Improve this question asked Nov 19, 2024 at 11:02 Алексей КулдошинАлексей Кулдошин 261 silver badge3 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

Various dependencies of @boost.asio were broken in the Bazel Central Registry. You need to force the latest versions of them with extra lines in MODULE.bazel:

bazel_dep(name = "boost.coroutine", version = "1.83.0.bcr.2")
bazel_dep(name = "boost.context", version = "1.83.0.bcr.2")
发布评论

评论列表(0)

  1. 暂无评论