build: clang build broken on Debian Bookworm #33279

issue fanquake opened this issue on September 2, 2025
  1. fanquake commented at 11:50 AM on September 2, 2025: member

    Our minimum required Clang is 16. Building with Clang-16 on Debian Bookworm is broken due to issue with capnp. See more details here: https://github.com/bitcoin-core/libmultiprocess/issues/199.

    # clang-16 --version
    Debian clang version 16.0.6 (15~deb12u1)
    
    cmake --build build
    ...
    In file included from /bitcoin/src/ipc/libmultiprocess/src/mp/util.cpp:6:
    In file included from /bitcoin/src/ipc/libmultiprocess/include/mp/util.h:8:
    In file included from /usr/include/capnp/schema.h:39:
    In file included from /usr/include/capnp/schema.capnp.h:6:
    In file included from /usr/include/capnp/generated-header-support.h:27:
    In file included from /usr/include/capnp/layout.h:34:
    /usr/include/capnp/blob.h:176:74: error: invalid operands to binary expression ('const char *' and 'kj::StringPtr')
    inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
                                                                           ~ ^  ~~~~~~~~~~~~
    /usr/include/kj/common.h:744:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MaxValue_' for 2nd argument
    inline bool operator==(T t, MaxValue_) { return t == Decay<T>(maxValue); }
                ^
    /usr/include/kj/common.h:744:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MaxValue_' for 1st argument
    /usr/include/kj/common.h:746:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MinValue_' for 2nd argument
    inline bool operator==(T t, MinValue_) { return t == Decay<T>(minValue); }
                ^
    /usr/include/kj/common.h:746:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MinValue_' for 1st argument
    /usr/include/capnp/blob.h:176:13: note: candidate function not viable: no known conversion from 'kj::StringPtr' to 'const Text::Builder' for 2nd argument
    inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
                ^                                                               ~~~~~~~~~~~~
    /usr/include/capnp/blob.h:176:13: note: candidate function (with reversed parameter order) not viable: no known conversion from 'const char *' to 'const Text::Builder' for 1st argument
    inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
                ^                                                          ~
    /usr/include/capnp/blob.h:177:74: error: invalid operands to binary expression ('const char *' and 'kj::StringPtr')
    inline bool operator!=(const char* a, const Text::Builder& b) { return a != b.asString(); }
                                                                           ~ ^  ~~~~~~~~~~~~
    /usr/include/kj/common.h:744:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MaxValue_' for 2nd argument
    inline bool operator==(T t, MaxValue_) { return t == Decay<T>(maxValue); }
                ^
    /usr/include/kj/common.h:744:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MaxValue_' for 1st argument
    /usr/include/kj/common.h:746:13: note: candidate function template not viable: no known conversion from 'kj::StringPtr' to 'MinValue_' for 2nd argument
    inline bool operator==(T t, MinValue_) { return t == Decay<T>(minValue); }
                ^
    /usr/include/kj/common.h:746:13: note: candidate function (with reversed parameter order) template not viable: no known conversion from 'const char *' to 'MinValue_' for 1st argument
    /usr/include/capnp/blob.h:176:13: note: candidate function not viable: no known conversion from 'kj::StringPtr' to 'const Text::Builder' for 2nd argument
    inline bool operator==(const char* a, const Text::Builder& b) { return a == b.asString(); }
                ^
    /usr/include/capnp/blob.h:177:13: note: candidate function not viable: no known conversion from 'kj::StringPtr' to 'const Text::Builder' for 2nd argument
    inline bool operator!=(const char* a, const Text::Builder& b) { return a != b.asString(); }
                ^                                                               ~~~~~~~~~~~~
    2 errors generated.
    

    This should be fixed / documented / worked around for 30.0.

  2. fanquake added this to the milestone 30.0 on Sep 2, 2025
  3. marcofleon commented at 2:58 PM on September 2, 2025: contributor

    Just got the same error with Clang 19. Installing the default Capn Proto packages (0.9.2) won't work it seems. I upgraded to 1.1.0 by building capnp from source and bitcoin builds now. It even builds an extra 1%...

    <img width="1459" height="324" alt="Image" src="https://github.com/user-attachments/assets/19cca262-77e1-4984-ad19-ceb84c0c573d" />

  4. fanquake renamed this:
    build: clang-16 build broken on Debian Bookworm
    build: clang build broken on Debian Bookworm
    on Sep 2, 2025
  5. fanquake commented at 9:37 AM on September 8, 2025: member

    Going to close this for now, based on https://github.com/bitcoin-core/libmultiprocess/pull/205 (which was pulled in via #33322). We can followup further if any similar issues surface while testing 30.x.

  6. fanquake closed this on Sep 8, 2025


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-26 06:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me