Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to compile with Boost.Cobalt #6417

Closed
01Pollux opened this issue Feb 22, 2025 · 2 comments
Closed

Failed to compile with Boost.Cobalt #6417

01Pollux opened this issue Feb 22, 2025 · 2 comments
Labels

Comments

@01Pollux
Copy link
Contributor

Xmake Version

xmake v2.9.7+master.db69821b7

Operating System Version and Architecture

Window 11 Pro 23H2

Describe Bug

Can't use Boost.Cobalt as it was not linked properly.

Expected Behavior

The code should have compiled.

Project Configuration

set_languages("c++23")

add_requires("boost", {configs = {cobalt = true, cmake = false}})
target("test")
    set_kind("binary")
    add_files("src/*.cpp")
    add_packages("boost")

main.cpp:

#include <iostream>
#include <boost/cobalt.hpp>
#include <boost/cobalt/main.hpp>

namespace co = boost::cobalt;

co::promise<int> test() {
	co_return 0;
}

co::main co_main(int argc, char* argv[]) {
	std::cout << "Hello, world!" << std::endl;
	co_return co_await test();
}

Additional Information and Error Logs

xmake logs:

checking for cl.exe ... C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\cl.exe
checking for Microsoft Visual Studio (x64) version ... 2022
checking for Microsoft C/C++ Compiler (x64) version ... 19.43.34808
checkinfo: cannot runv(nim.exe --version), No such file or directory
checking for nim ... no
checkinfo: cannot runv(nim.exe --version), No such file or directory
checking for nim ... no
checking for git ... ok
checkinfo: cannot runv(gzip.exe --version), No such file or directory
checking for gzip ... no
checking for 7z ... C:\Users\medra\xmake\winenv\bin\7z
git rev-parse HEAD
finding boost from xmake ..
checking for xmake::boost ... boost 1.87.0
checking for link.exe ... C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\link.exe
checking for the linker (ld) ... link.exe
checking for cl.exe ... C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\cl.exe
checking for the c++ compiler (cxx) ... cl.exe
checking for C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.43.34808\bin\HostX64\x64\cl.exe ... ok
checking for flags (-std:c++23) ... no
> cl.exe "-std:c++23" "-nologo"
checking for flags (-std:c++latest) ... ok
> cl.exe "-std:c++latest" "-nologo"
checking for flags (cl_external_includedir) ... ok
> cl.exe "-external:W0" "-external:IC:\Users\medra\AppData\Local\.xmake\packages\b\boost\1.87.0\b694cda7ccd44f46ae25e0edec81201a\include" "-nologo"
[ 75%]: linking.release test.exe
"C:\\Program Files\\Microsoft Visual Studio\\2022\\Preview\\VC\\Tools\\MSVC\\14.43.34808\\bin\\HostX64\\x64\\link.exe" -nologo -dynamicbase -nxcompat -machine:x64 -libpath:C:\Users\medra\AppData\Local\.xmake\packages\b\boost\1.87.0\b694cda7ccd44f46ae25e0edec81201a\lib libboost_filesystem-mt-s.lib libboost_system-mt-s.lib libboost_atomic-mt-s.lib -out:build\windows\x64\release\test.exe build\.objs\test\windows\x64\release\src\main.cpp.obj
error: @programdir\core\main.lua:329: @programdir\actions\build\main.lua:148: @programdir\modules\async\runjobs.lua:325: @programdir\actions\build\kinds\binary.lua:57: @programdir\modules\core\tools\link.lua:175: main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "class std::pmr::memory_resource * __cdecl boost::cobalt::detail::get_memory_resource_from_args<>(void)" (??$get_memory_resource_from_args@$$V@detail@cobalt@boost@@YAPEAVmemory_resource@pmr@std@@XZ)
main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "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)
main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "class boost::asio::any_io_executor __cdecl boost::cobalt::detail::get_executor_from_args<>(void)" (??$get_executor_from_args@$$V@detail@cobalt@boost@@YA?AVany_io_executor@asio@2@XZ)
main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "void __cdecl boost::cobalt::detail::self_destroy<struct boost::cobalt::detail::cobalt_promise<int> >(struct std::coroutine_handle<struct boost::cobalt::detail::cobalt_promise<int> >)" (??$self_destroy@U?$cobalt_promise@H@detail@cobalt@boost@@@detail@cobalt@boost@@YAXU?$coroutine_handle@U?$cobalt_promise@H@detail@cobalt@boost@@@std@@@Z)
main.cpp.obj : error LNK2019: unresolved external symbol "class std::exception_ptr __cdecl boost::cobalt::detail::completed_unexpected(void)" (?completed_unexpected@detail@cobalt@boost@@YA?AVexception_ptr@std@@XZ) referenced in function "public: __cdecl boost::cobalt::detail::cobalt_promise<int>::~cobalt_promise<int>(void)" (??1?$cobalt_promise@H@detail@cobalt@boost@@QEAA@XZ)
main.cpp.obj : error LNK2019: unresolved external symbol "class std::exception_ptr __cdecl boost::cobalt::detail::already_awaited(void)" (?already_awaited@detail@cobalt@boost@@YA?AVexception_ptr@std@@XZ) referenced in function "public: bool __cdecl boost::cobalt::detail::promise_receiver<int>::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@H@detail@cobalt@boost@@QEAA_NU?$coroutine_handle@Umain_promise@detail@cobalt@boost@@@std@@@Z)
main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "class boost::cobalt::main __cdecl co_main$_ResumeCoro$1(int,char * * const)" (?co_main$_ResumeCoro$1@@YA?AVmain@cobalt@boost@@HQEAPEAD@Z)     
main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function main
build\windows\x64\release\test.exe : fatal error LNK1120: 8 unresolved externals

stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:1075]:
    [@programdir\modules\core\tools\link.lua:175]: in function 'catch'
    [@programdir\core\sandbox\modules\try.lua:123]: in function 'try'
    [@programdir\modules\core\tools\link.lua:151]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:246]:
    [@programdir\core\tool\linker.lua:232]: in function 'link'
    [@programdir\actions\build\kinds\binary.lua:57]: in function 'callback'
    [@programdir\modules\core\project\depend.lua:227]: in function 'on_changed'
    [@programdir\actions\build\kinds\binary.lua:41]: in function '_do_link_target'
    [@programdir\actions\build\kinds\binary.lua:87]:
    [@programdir\actions\build\kinds\binary.lua:114]: in function '_link_target'
    [@programdir\actions\build\kinds\binary.lua:142]: in function 'jobfunc'
    [@programdir\modules\async\runjobs.lua:241]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:246]: in function 'trycall'
    [@programdir\core\sandbox\modules\try.lua:117]: in function 'try'
    [@programdir\modules\async\runjobs.lua:224]: in function 'cotask'
    [@programdir\core\base\scheduler.lua:406]:

stack traceback:
        [C]: in function 'error'
        @programdir\core\base\os.lua:1075: in function 'os.raiselevel'
        (...tail calls...)
        @programdir\core\main.lua:329: in upvalue 'cotask'
        @programdir\core\base\scheduler.lua:406: in function <@programdir\core\base\scheduler.lua:399>

msvc logs:

Build started at 1:16 PM...
1>------ Build started: Project: test, Configuration: release x64 ------
1>$xmake config -y  -P . -p windows -m release -a x64 -o "build"
1>$xmake build -y  -P .  "test"
1>[ 50%]: compiling.release src\main.cpp
1>[ 75%]: linking.release test.exe
1>EXEC : error : main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "class std::pmr::memory_resource * __cdecl boost::cobalt::detail::get_memory_resource_from_args<>(void)" (??$get_memory_resource_from_args@$$V@detail@cobalt@boost@@YAPEAVmemory_resource@pmr@std@@XZ)
1>main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "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)
1>main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "class boost::asio::any_io_executor __cdecl boost::cobalt::detail::get_executor_from_args<>(void)" (??$get_executor_from_args@$$V@detail@cobalt@boost@@YA?AVany_io_executor@asio@2@XZ)
1>main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "void __cdecl boost::cobalt::detail::self_destroy<struct boost::cobalt::detail::cobalt_promise<int> >(struct std::coroutine_handle<struct boost::cobalt::detail::cobalt_promise<int> >)" (??$self_destroy@U?$cobalt_promise@H@detail@cobalt@boost@@@detail@cobalt@boost@@YAXU?$coroutine_handle@U?$cobalt_promise@H@detail@cobalt@boost@@@std@@@Z)
1>main.cpp.obj : error LNK2019: unresolved external symbol "class std::exception_ptr __cdecl boost::cobalt::detail::completed_unexpected(void)" (?completed_unexpected@detail@cobalt@boost@@YA?AVexception_ptr@std@@XZ) referenced in function "public: __cdecl boost::cobalt::detail::cobalt_promise<int>::~cobalt_promise<int>(void)" (??1?$cobalt_promise@H@detail@cobalt@boost@@QEAA@XZ)
1>main.cpp.obj : error LNK2019: unresolved external symbol "class std::exception_ptr __cdecl boost::cobalt::detail::already_awaited(void)" (?already_awaited@detail@cobalt@boost@@YA?AVexception_ptr@std@@XZ) referenced in function "public: bool __cdecl boost::cobalt::detail::promise_receiver<int>::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@H@detail@cobalt@boost@@QEAA_NU?$coroutine_handle@Umain_promise@detail@cobalt@boost@@@std@@@Z)
1>main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function "class boost::cobalt::main __cdecl co_main$_ResumeCoro$1(int,char * * const)" (?co_main$_ResumeCoro$1@@YA?AVmain@cobalt@boost@@HQEAPEAD@Z)
1>main.cpp.obj : error LNK2019: unresolved external symbol "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) referenced in function main
1>build\windows\x64\release\test.exe : fatal error LNK1120: 8 unresolved externals
1>
1>C:\Users\medra\xmake\scripts\vsxmake\vsproj\Xmake.targets(102,5): error MSB3073: The command "..." exited with code -1.
1>Done building project "test.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 1:16 PM and took 06.035 seconds ==========
@01Pollux 01Pollux added the bug label Feb 22, 2025
@star-hengxing
Copy link
Contributor

add_requires("boost[cmkae,cobalt,asio]") work for me, you can try it.

@01Pollux
Copy link
Contributor Author

01Pollux commented Feb 25, 2025

Thanks! one question though, is it possible to explicitly specify which boost's component should be shared and which should be static? i don't see any way to do so

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants