boostorg / cobalt

Coroutines for C++20 & asio
https://www.boost.org/doc/libs/master/libs/cobalt/doc/html/index.html
191 stars 22 forks source link

vs2022 error LNK2019 #145

Closed ml232528 closed 1 month ago

ml232528 commented 6 months ago

Visual Studio 2022 Prompt error:error LNK2019 boost Compilation options :.\b2 install --prefix=./编译后/boost/vs2022

main.cpp:

#include <boost/cobalt/channel.hpp>
#include <boost/cobalt/main.hpp>
#include <boost/cobalt/promise.hpp>

#include <iostream>

namespace cobalt = boost::cobalt;

// tag::channel_example[]
cobalt::promise<void> producer(cobalt::channel<int>& chan)
{
    for (int i = 0; i < 4; i++)
        co_await chan.write(i);

    chan.close();
}

cobalt::main co_main(int argc, char* argv[])
{
    cobalt::channel<int> c;

    auto p = producer(c);
    while (c.is_open())
        std::cout << co_await c.read() << std::endl;

    co_await p;
    co_return 0;
}
// end::channel_example[]
15:06:06:918    生成开始于 15:06...
15:06:07:332    1>------ 已启动生成: 项目: ConsoleApplication10, 配置: Debug x64 ------
15:06:07:725    1>main.cpp
15:06:07:776    1>Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:
15:06:07:776    1>- add -D_WIN32_WINNT=0x0601 to the compiler command line; or
15:06:07:776    1>- add _WIN32_WINNT=0x0601 to your project's Preprocessor Definitions.
15:06:07:776    1>Assuming _WIN32_WINNT=0x0601 (i.e. Windows 7 target).
15:06:09:988    1>main.obj : error LNK2019: 无法解析的外部符号 "class std::pmr::memory_resource * __cdecl boost::cobalt::this_thread::get_default_resource(void)" (?get_default_resource@this_thread@cobalt@boost@@YAPEAVmemory_resource@pmr@std@@XZ),函数 "class std::pmr::memory_resource * __cdecl boost::cobalt::detail::get_memory_resource_from_args<struct boost::cobalt::channel<int> &>(struct boost::cobalt::channel<int> &)" (??$get_memory_resource_from_args@AEAU?$channel@H@cobalt@boost@@@detail@cobalt@boost@@YAPEAVmemory_resource@pmr@std@@AEAU?$channel@H@12@@Z) 中引用了该符号
15:06:10:045    1>main.obj : error LNK2019: 无法解析的外部符号 "class std::pmr::memory_resource * __cdecl boost::cobalt::this_thread::set_default_resource(class std::pmr::memory_resource *)" (?set_default_resource@this_thread@cobalt@boost@@YAPEAVmemory_resource@pmr@std@@PEAV456@@Z),函数 "public: void __cdecl `int __cdecl main(int,char * * const)'::`2'::reset_res::operator()(class std::pmr::memory_resource *)" (??Rreset_res@?1??main@@YAHHQEAPEAD@Z@QEAAXPEAVmemory_resource@pmr@std@@@Z) 中引用了该符号
15:06:10:045    1>main.obj : error LNK2019: 无法解析的外部符号 "class boost::asio::any_io_executor & __cdecl boost::cobalt::this_thread::get_executor(struct boost::source_location const &)" (?get_executor@this_thread@cobalt@boost@@YAAEAVany_io_executor@asio@3@AEBUsource_location@3@@Z),函数 "class boost::asio::any_io_executor __cdecl boost::cobalt::detail::get_executor_from_args<struct boost::cobalt::channel<int> &>(struct boost::cobalt::channel<int> &)" (??$get_executor_from_args@AEAU?$channel@H@cobalt@boost@@@detail@cobalt@boost@@YA?AVany_io_executor@asio@2@AEAU?$channel@H@12@@Z) 中引用了该符号
15:06:10:045    1>main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl boost::cobalt::detail::self_destroy(struct std::coroutine_handle<void>,class boost::asio::any_io_executor const &)" (?self_destroy@detail@cobalt@boost@@YAXU?$coroutine_handle@X@std@@AEBVany_io_executor@asio@3@@Z),函数 "void __cdecl boost::cobalt::detail::self_destroy<struct boost::cobalt::detail::cobalt_promise<void> >(struct std::coroutine_handle<struct boost::cobalt::detail::cobalt_promise<void> >)" (??$self_destroy@U?$cobalt_promise@X@detail@cobalt@boost@@@detail@cobalt@boost@@YAXU?$coroutine_handle@U?$cobalt_promise@X@detail@cobalt@boost@@@std@@@Z) 中引用了该符号
15:06:10:045    1>main.obj : error LNK2019: 无法解析的外部符号 "public: struct std::suspend_never __cdecl boost::cobalt::detail::main_promise::final_suspend(void)" (?final_suspend@main_promise@detail@cobalt@boost@@QEAA?AUsuspend_never@std@@XZ),函数 "class boost::cobalt::main __cdecl co_main$_ResumeCoro$1(int,char * * const)" (?co_main$_ResumeCoro$1@@YA?AVmain@cobalt@boost@@HQEAPEAD@Z) 中引用了该符号
15:06:10:045    1>main.obj : error LNK2019: 无法解析的外部符号 "public: static int __cdecl boost::cobalt::detail::main_promise::run_main(class boost::cobalt::main)" (?run_main@main_promise@detail@cobalt@boost@@SAHVmain@34@@Z),函数 main 中引用了该符号
15:06:10:045    1>main.obj : error LNK2019: 无法解析的外部符号 "class std::exception_ptr __cdecl boost::cobalt::detail::completed_unexpected(void)" (?completed_unexpected@detail@cobalt@boost@@YA?AVexception_ptr@std@@XZ),函数 "public: __cdecl boost::cobalt::detail::cobalt_promise<void>::~cobalt_promise<void>(void)" (??1?$cobalt_promise@X@detail@cobalt@boost@@QEAA@XZ) 中引用了该符号
15:06:10:045    1>main.obj : error LNK2019: 无法解析的外部符号 "class std::exception_ptr __cdecl boost::cobalt::detail::already_awaited(void)" (?already_awaited@detail@cobalt@boost@@YA?AVexception_ptr@std@@XZ),函数 "public: bool __cdecl boost::cobalt::detail::promise_receiver<void>::awaitable::await_suspend<struct boost::cobalt::detail::main_promise>(struct std::coroutine_handle<struct boost::cobalt::detail::main_promise>)" (??$await_suspend@Umain_promise@detail@cobalt@boost@@@awaitable@?$promise_receiver@X@detail@cobalt@boost@@QEAA_NU?$coroutine_handle@Umain_promise@detail@cobalt@boost@@@std@@@Z) 中引用了该符号
15:06:10:045    1>C:\Users\kk\source\repos\ConsoleApplication10\x64\Debug\ConsoleApplication10.exe : fatal error LNK1120: 8 个无法解析的外部命令
15:06:10:045    1>已完成生成项目“ConsoleApplication10.vcxproj”的操作 - 失败。
15:06:10:472    ========== 生成: 0 成功,1 失败,0 最新,0 已跳过 ==========
15:06:10:472    ========== 生成 于 15:06 完成,耗时 03.588 秒 ==========
klemens-morgenstern commented 6 months ago

Are you linking boost.cobalt?

ml232528 commented 6 months ago

Are you linking boost.cobalt?

I searched the lib file directory, but there are no files containing the cobalt name. Does cobalt not generate by default?

klemens-morgenstern commented 6 months ago

You need to build boost.

ml232528 commented 6 months ago

You need to build boost.

It has already been build boost: .\b2 install --prefix=./编译后/boost/vs2022

klemens-morgenstern commented 2 months ago

You need to pass cxxstd=20 to b2.