Skip to content

Conversation

@hebasto
Copy link
Member

@hebasto hebasto commented Aug 23, 2025

@DrahtBot
Copy link

DrahtBot commented Aug 23, 2025

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Reviews

See the guideline for information on the review process.
A summary of reviews will appear here.

hebasto added a commit to hebasto/bitcoin-core-nightly that referenced this pull request Aug 23, 2025
hebasto added a commit to hebasto/bitcoin-core-nightly that referenced this pull request Aug 23, 2025
@ryanofsky
Copy link
Collaborator

Errors all appear to be undefined reference to 'kj::getCaughtExceptionAsKj()' linker errors

@hebasto hebasto closed this Aug 23, 2025
@hebasto hebasto reopened this Aug 23, 2025
@ryanofsky
Copy link
Collaborator

I noticed getCaughtExceptionAsKj doesn't seem to be defined if KJ_NO_EXCEPTIONS is defined. Doesn't look like netbsd is defining that though https://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/devel/capnproto/

@ryanofsky ryanofsky closed this Aug 23, 2025
@ryanofsky ryanofsky reopened this Aug 23, 2025
@Sjors
Copy link
Member

Sjors commented Sep 5, 2025

Maybe rebase after #197 for easier review?

@hebasto
Copy link
Member Author

hebasto commented Sep 5, 2025

Maybe rebase after #197 for easier review?

Sure! Rebased.

@ryanofsky
Copy link
Collaborator

Assuming the netbsd job still fails, I guess there are different directions we may go with this issue:

  • If it's possible to fix this with a change in libmultiprocess that would be ideal.
  • If that's not possible, then maybe netbsd job could install from capnproto from source and we could report an issue to netbsd.
  • If installing capnproto from source doesn't work, this will require a fix in capnproto.

And regardless of these, we may want to add a try_compile test and error with suggested workarounds along the lines of #205

@hebasto
Copy link
Member Author

hebasto commented Sep 5, 2025

Assuming the netbsd job still fails, I guess there are different directions we may go with this issue:

  • If it's possible to fix this with a change in libmultiprocess that would be ideal.

  • If that's not possible, then maybe netbsd job could install from capnproto from source and we could report an issue to netbsd.

  • If installing capnproto from source doesn't work, this will require a fix in capnproto.

And regardless of these, we may want to add a try_compile test and error with suggested workarounds along the lines of #205

FWIW, build with depends succeeds: https://github.com/hebasto/bitcoin-core-nightly/actions/runs/17482518540/job/49655572035.

@maflcko
Copy link
Contributor

maflcko commented Dec 22, 2025

Could rebase for fresh CI logs?

@hebasto
Copy link
Member Author

hebasto commented Dec 22, 2025

Could rebase for fresh CI logs?

Sure thing! Done.

@maflcko
Copy link
Contributor

maflcko commented Dec 22, 2025

For reference, the full error is:

[7/7] Linking CXX executable test/mptest
FAILED: [code=1] test/mptest 
: && /usr/pkg/gcc14/bin/g++ -Werror -Wall -Wextra -Wpedantic -Wno-unused-parameter  test/CMakeFiles/mptest.dir/mp/test/test.cpp.o test/CMakeFiles/mptest.dir/mp/test/foo.capnp.c++.o test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-client.c++.o test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-server.c++.o test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-types.c++.o -o test/mptest  -Wl,-rpath,/usr/pkg/lib  libmultiprocess.a  /usr/pkg/lib/libkj-test-1.1.0.so  /usr/pkg/lib/libcapnp-rpc-1.1.0.so  /usr/pkg/lib/libcapnp-1.1.0.so  /usr/pkg/lib/libkj-async-1.1.0.so  /usr/pkg/lib/libkj-1.1.0.so  -lpthread  -Wl,-R/usr/pkg/lib  -pthread  -lpthread && :
/usr/bin/ld: warning: libstdc++.so.9, needed by /usr/pkg/lib/libkj-test-1.1.0.so, may conflict with libstdc++.so.7
/usr/bin/ld: test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-server.c++.o: in function `kj::Maybe<kj::Exception> kj::runCatchingExceptions<mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackParams, mp::test::messages::FooInterface::CallbackResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > >, mp::TypeList<mp::test::FooCallback&, int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackParams, mp::test::messages::FooInterface::CallbackResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > > const&, mp::TypeList<mp::test::FooCallback&, int>&&)::{lambda()#1}::operator()()::{lambda()#3}>(mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackParams, mp::test::messages::FooInterface::CallbackResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > >, mp::TypeList<mp::test::FooCallback&, int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackParams, mp::test::messages::FooInterface::CallbackResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > > const&, mp::TypeList<mp::test::FooCallback&, int>&&)::{lambda()#1}::operator()()::{lambda()#3}&&)':
foo.capnp.proxy-server.c++:(.text._ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_14CallbackParamsENSB_15CallbackResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJRNS9_11FooCallbackEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS17_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS11_[_ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_14CallbackParamsENSB_15CallbackResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJRNS9_11FooCallbackEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS17_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS11_]+0x52): undefined reference to `kj::getCaughtExceptionAsKj()'
/usr/bin/ld: test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-server.c++.o: in function `kj::Maybe<kj::Exception> kj::runCatchingExceptions<mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackUniqueParams, mp::test::messages::FooInterface::CallbackUniqueResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > >, mp::TypeList<std::unique_ptr<mp::test::FooCallback, std::default_delete<mp::test::FooCallback> >, int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackUniqueParams, mp::test::messages::FooInterface::CallbackUniqueResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > > const&, mp::TypeList<std::unique_ptr<mp::test::FooCallback, std::default_delete<mp::test::FooCallback> >, int>&&)::{lambda()#1}::operator()()::{lambda()#3}>(mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackUniqueParams, mp::test::messages::FooInterface::CallbackUniqueResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > >, mp::TypeList<std::unique_ptr<mp::test::FooCallback, std::default_delete<mp::test::FooCallback> >, int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackUniqueParams, mp::test::messages::FooInterface::CallbackUniqueResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > > const&, mp::TypeList<std::unique_ptr<mp::test::FooCallback, std::default_delete<mp::test::FooCallback> >, int>&&)::{lambda()#1}::operator()()::{lambda()#3}&&)':
foo.capnp.proxy-server.c++:(.text._ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_20CallbackUniqueParamsENSB_21CallbackUniqueResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJSt10unique_ptrINS9_11FooCallbackESt14default_deleteISX_EEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS1A_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS14_[_ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_20CallbackUniqueParamsENSB_21CallbackUniqueResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJSt10unique_ptrINS9_11FooCallbackESt14default_deleteISX_EEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS1A_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS14_]+0x52): undefined reference to `kj::getCaughtExceptionAsKj()'
/usr/bin/ld: test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-server.c++.o: in function `kj::Maybe<kj::Exception> kj::runCatchingExceptions<mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSharedParams, mp::test::messages::FooInterface::CallbackSharedResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > >, mp::TypeList<std::shared_ptr<mp::test::FooCallback>, int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSharedParams, mp::test::messages::FooInterface::CallbackSharedResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > > const&, mp::TypeList<std::shared_ptr<mp::test::FooCallback>, int>&&)::{lambda()#1}::operator()()::{lambda()#3}>(mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSharedParams, mp::test::messages::FooInterface::CallbackSharedResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > >, mp::TypeList<std::shared_ptr<mp::test::FooCallback>, int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSharedParams, mp::test::messages::FooInterface::CallbackSharedResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > > const&, mp::TypeList<std::shared_ptr<mp::test::FooCallback>, int>&&)::{lambda()#1}::operator()()::{lambda()#3}&&)':
foo.capnp.proxy-server.c++:(.text._ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_20CallbackSharedParamsENSB_21CallbackSharedResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJSt10shared_ptrINS9_11FooCallbackEEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS18_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS12_[_ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_20CallbackSharedParamsENSB_21CallbackSharedResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJSt10shared_ptrINS9_11FooCallbackEEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS18_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS12_]+0x52): undefined reference to `kj::getCaughtExceptionAsKj()'
/usr/bin/ld: test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-server.c++.o: in function `kj::Maybe<kj::Exception> kj::runCatchingExceptions<mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::SaveCallbackParams, mp::test::messages::FooInterface::SaveCallbackResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerCall>, mp::TypeList<std::shared_ptr<mp::test::FooCallback> > >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::SaveCallbackParams, mp::test::messages::FooInterface::SaveCallbackResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerCall> const&, mp::TypeList<std::shared_ptr<mp::test::FooCallback> >&&)::{lambda()#1}::operator()()::{lambda()#3}>(mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::SaveCallbackParams, mp::test::messages::FooInterface::SaveCallbackResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerCall>, mp::TypeList<std::shared_ptr<mp::test::FooCallback> > >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::SaveCallbackParams, mp::test::messages::FooInterface::SaveCallbackResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Callback, 17>, mp::ServerCall> const&, mp::TypeList<std::shared_ptr<mp::test::FooCallback> >&&)::{lambda()#1}::operator()()::{lambda()#3}&&)':
foo.capnp.proxy-server.c++:(.text._ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_18SaveCallbackParamsENSB_19SaveCallbackResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENS1_10ServerCallEEEJNS1_8TypeListIJSt10shared_ptrINS9_11FooCallbackEEEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSO_IJEEERS11_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOSV_[_ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_18SaveCallbackParamsENSB_19SaveCallbackResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENS1_10ServerCallEEEJNS1_8TypeListIJSt10shared_ptrINS9_11FooCallbackEEEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSO_IJEEERS11_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOSV_]+0x52): undefined reference to `kj::getCaughtExceptionAsKj()'
/usr/bin/ld: test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-server.c++.o: in function `kj::Maybe<kj::Exception> kj::runCatchingExceptions<mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSavedParams, mp::test::messages::FooInterface::CallbackSavedResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> >, mp::TypeList<int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSavedParams, mp::test::messages::FooInterface::CallbackSavedResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > const&, mp::TypeList<int>&&)::{lambda()#1}::operator()()::{lambda()#3}>(mp::PassField<mp::Accessor<mp::foo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSavedParams, mp::test::messages::FooInterface::CallbackSavedResults> >, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> >, mp::TypeList<int> >(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<mp::test::messages::FooInterface>, capnp::CallContext<mp::test::messages::FooInterface::CallbackSavedParams, mp::test::messages::FooInterface::CallbackSavedResults> >&, mp::ServerField<1, mp::Accessor<mp::foo_fields::Arg, 1>, mp::ServerRet<mp::Accessor<mp::foo_fields::Result, 2>, mp::ServerCall> > const&, mp::TypeList<int>&&)::{lambda()#1}::operator()()::{lambda()#3}&&)':
foo.capnp.proxy-server.c++:(.text._ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_19CallbackSavedParamsENSB_20CallbackSavedResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEJNS1_8TypeListIJiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSS_IJEEERS12_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOSW_[_ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_19CallbackSavedParamsENSB_20CallbackSavedResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEJNS1_8TypeListIJiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSS_IJEEERS12_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOSW_]+0x52): undefined reference to `kj::getCaughtExceptionAsKj()'
/usr/bin/ld: test/CMakeFiles/mptest.dir/mp/test/foo.capnp.proxy-server.c++.o:foo.capnp.proxy-server.c++:(.text._ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_22CallbackExtendedParamsENSB_23CallbackExtendedResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJRNS9_16ExtendedCallbackEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS17_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS11_[_ZN2kj21runCatchingExceptionsIZZN2mp9PassFieldINS1_8AccessorINS1_10foo_fields7ContextELi17EEENS1_19ServerInvokeContextINS1_11ProxyServerINS1_4test8messages12FooInterfaceEEEN5capnp11CallContextINSB_22CallbackExtendedParamsENSB_23CallbackExtendedResultsEEEEENS1_11ServerFieldILi1ENS3_INS4_8CallbackELi17EEENSJ_ILi1ENS3_INS4_3ArgELi1EEENS1_9ServerRetINS3_INS4_6ResultELi2EEENS1_10ServerCallEEEEEEEJNS1_8TypeListIJRNS9_16ExtendedCallbackEiEEEEEENSt9enable_ifIXsrSt7is_sameIDTclsrT_3getcldtdtfp1_12call_context9getParamsEEENS1_7Context6ReaderEE5valueENS_7PromiseINT0_11CallContextEEEE4typeENS1_8PriorityILi1EEENSV_IJEEERS17_RKT1_DpOT2_ENUlvE_clEvEUlvE1_EENS_5MaybeINS_9ExceptionEEEOS11_]+0x52): more undefined references to `kj::getCaughtExceptionAsKj()' follow
collect2: error: ld returned 1 exit status

@hebasto
Copy link
Member Author

hebasto commented Dec 22, 2025

I built the updated devel/capnproto-1.2.0 from source and am still encountering the same errors.

@hebasto hebasto force-pushed the 250823-ci-netbsd branch 3 times, most recently from 1d93480 to a5a4d6d Compare December 22, 2025 21:05
@hebasto hebasto marked this pull request as ready for review December 22, 2025 21:15
@hebasto
Copy link
Member Author

hebasto commented Dec 22, 2025

CI is green now. Undrafted.

@hebasto
Copy link
Member Author

hebasto commented Dec 22, 2025

Assuming the netbsd job still fails, I guess there are different directions we may go with this issue:

  • If it's possible to fix this with a change in libmultiprocess that would be ideal.

  • If that's not possible, then maybe netbsd job could install from capnproto from source and we could report an issue to netbsd.

  • If installing capnproto from source doesn't work, this will require a fix in capnproto.

And regardless of these, we may want to add a try_compile test and error with suggested workarounds along the lines of #205

Officially, GCC has supported the __has_feature extension since version 14. On NetBSD, however, GCC 10.5.0, which is used to build binary packages, already implements __has_feature, but __has_feature(cxx_exceptions) evaluates to false for some reason. This makes the following code problematic:https://github.com/capnproto/capnproto/blob/584db417ecf8377c7d8cd1099bf5fbccd57d68aa/c%2B%2B/src/kj/common.h#L154-L175

As a result, KJ_NO_EXCEPTIONS is defined to 1 by default. This behaviour is overridden in this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants