Skip to content

-static-libstdc++ with stacktrace_from_exception produces duplicate symbol __cxa_allocate_exception #208

@godexsoft

Description

@godexsoft

I'm trying to update our project (The XRP ledger) to Boost 1.88 and I'm seeing a linker error on x86 (where stacktrace_from_exception gets enabled by default):

/usr/bin/ld: /usr/bin/../lib/gcc/x86_64-linux-gnu/12/libstdc++.a(eh_alloc.o): in function `__cxa_allocate_exception':
(.text.__cxa_allocate_exception+0x0): multiple definition of `__cxa_allocate_exception'; /root/.conan2/p/b/boost4d02c12b1f707/p/lib/libboost_stacktrace_from_exception.a(from_exception.o):/root/.conan2/p/boost9ad4e6f6d8220/s/src/libs/stacktrace/build/../src/from_exception.cpp:248: first defined here

This only happens with -static-libstdc++ -static-libgcc options.
There seems to be no easy way to disable the component through conan. I tried something like

def configure(self):
    self.options["boost"].extra_b2_flags = "boost.stacktrace.from_exception=off"

which results in

boost/1.88.0: WARN: Boost component 'stacktrace_from_exception' is missing libraries. Try building boost with '-o boost:without_stacktrace_from_exception'. (Option is not guaranteed to exist)
ERROR: boost/1.88.0: Error in package_info() method, line 2026
        raise ConanException(f"These libraries were expected to be built, but were not built: {non_built}")
        ConanException: These libraries were expected to be built, but were not built: {'boost_stacktrace_from_exception'}

Here is the real project breaking: https://github.com/XRPLF/rippled/actions/runs/16486148700/job/46611443287?pr=5570
Any help and suggestions are very welcome 🙏

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions