Homebrew / homebrew-core

🍻 Default formulae for the missing package manager for macOS (or Linux)
https://brew.sh
BSD 2-Clause "Simplified" License
13.57k stars 12.31k forks source link

Linker error with LLVM 18.1.8: std::exception_ptr::__from_native_exception_pointer(void*) #178435

Closed mborland closed 1 month ago

mborland commented 1 month ago

brew gist-logs <formula> link OR brew config AND brew doctor output

brew config:

HOMEBREW_VERSION: 4.3.10
ORIGIN: https://github.com/Homebrew/brew
HEAD: c3ae0327c01aab461531bfc0fcdfb4dd3a779205
Last commit: 7 days ago
Core tap JSON: 25 Jul 12:31 UTC
Core cask tap JSON: 25 Jul 12:31 UTC
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 10
Homebrew Ruby: 3.3.3 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/3.3.3/bin/ruby
CPU: 10-core 64-bit arm_firestorm_icestorm
Clang: 15.0.0 build 1500
Git: 2.45.2 => /opt/homebrew/bin/git
Curl: 8.6.0 => /usr/bin/curl
macOS: 14.5-arm64
CLT: 15.3.0.0.1.1708646388
Xcode: 15.4
Rosetta 2: false

brew doctor:

Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: Some installed formulae are deprecated or disabled.
You should find replacements for the following formulae:
  openssl@1.1

brew remove openssl@1.1
Error: Refusing to uninstall /opt/homebrew/Cellar/openssl@1.1/1.1.1w
because it is required by fftw, liblqr and pstoedit, which are currently installed.
You can override this and force removal with:
  brew uninstall --ignore-dependencies openssl@1.1

Verification

What were you trying to do (and why)?

I am trying to build the boost 1.86 beta release candidate. The tar ball can be found: https://archives.boost.io/beta/1.86.0.beta1/source/. I am trying to build it since I am a boost maintainer, and am testing the build as part of the upcoming release cycle.

What happened (include all command output)?

I received a linker error for std::exception pointer:

Undefined symbols for architecture arm64:
  "std::exception_ptr::__from_native_exception_pointer(void*)", referenced from:
      std::exception_ptr std::make_exception_ptr[abi:ne180100]<boost::system::error_code>(boost::system::error_code) in exception.o
      boost::asio::detail::thread_info_base::capture_current_exception() in main.o
  "___cxa_init_primary_exception", referenced from:
      std::exception_ptr std::make_exception_ptr[abi:ne180100]<boost::system::error_code>(boost::system::error_code) in exception.o
      boost::asio::detail::thread_info_base::capture_current_exception() in main.o

Searching LLVMs logs lead me to:

https://github.com/llvm/llvm-project/issues/86077

which is linked to:

https://github.com/llvm/llvm-project/issues/77653

A homebrew maintainer states here there is a patch already applied to homebrew:

https://github.com/llvm/llvm-project/issues/77653#issuecomment-2138514529

Full output: ``` ./b2 cxxstd=20 toolset=clang --stage Performing configuration checks - default address-model : 64-bit (cached) [1] - default architecture : arm (cached) [1] Building the Boost C++ Libraries. - cxx11_static_assert : yes (cached) [2] - cxx11_variadic_templates : yes (cached) [2] - cxx11_decltype : yes (cached) [2] - GCC libquadmath and __float128 support : no (cached) [2] - cxx11_hdr_ratio : yes (cached) [2] - cxx11_template_aliases : yes (cached) [2] - cxx11_char16_t : yes (cached) [2] - cxx11_char32_t : yes (cached) [2] - cxx20_hdr_concepts : yes (cached) [2] - cpp_lib_memory_resource : yes (cached) [2] warning: non-free usage requirements std ignored warning: in main-target boost_cobalt at libs/cobalt/build/Jamfile:73 - has std::atomic_ref : no (cached) [2] - has -Wl,--no-undefined : no (cached) [2] - has -Wl,-undefined,error : yes (cached) [2] - has statx : no (cached) [2] - has statx syscall : no (cached) [2] - cxx11_rvalue_references : yes (cached) [2] - cxx11_scoped_enums : yes (cached) [2] - cxx11_noexcept : yes (cached) [2] - cxx11_nullptr : yes (cached) [2] - cxx11_defaulted_functions : yes (cached) [2] - cxx11_defaulted_moves : yes (cached) [2] - cxx11_deleted_functions : yes (cached) [2] - cxx11_function_template_default_args : yes (cached) [2] - cxx11_final : yes (cached) [2] - cxx11_override : yes (cached) [2] - has init_priority attribute : yes (cached) [2] - has stat::st_blksize : no (cached) [2] - has stat::st_mtim : no (cached) [2] - has stat::st_mtimensec : no (cached) [2] - has stat::st_mtimespec : yes (cached) [2] - has stat::st_birthtim : no (cached) [2] - has stat::st_birthtimensec : no (cached) [2] - has stat::st_birthtimespec : yes (cached) [2] - has fdopendir(O_NOFOLLOW) : yes (cached) [2] - has dirent::d_type : yes (cached) [2] - has POSIX *at APIs : no (cached) [2] - has fallocate : no (cached) [2] - cxx11_auto_declarations : yes (cached) [2] - cxx11_constexpr : yes (cached) [2] - cxx11_hdr_mutex : yes (cached) [2] - cxx11_hdr_tuple : yes (cached) [2] - cxx11_lambdas : yes (cached) [2] - cxx11_thread_local : yes (cached) [2] warning: Graph library does not contain MPI-based parallel components. note: to enable them, add "using mpi ;" to your user-config.jam. note: to suppress this message, pass "--without-graph_parallel" to bjam. - zlib : yes (cached) [2] - bzip2 : yes (cached) [2] - lzma : yes (cached) [2] - zstd : yes (cached) [2] - has_lzma_cputhreads builds : yes (cached) [2] - cxx11_basic_alignas : yes (cached) [2] - icu : no (cached) [2] - iconv (libc) : no (cached) [2] - iconv (separate) : yes (cached) [2] - cxx11_hdr_functional : yes (cached) [2] - cxx11_hdr_type_traits : yes (cached) [2] - cxx11_range_based_for : yes (cached) [2] - cxx11_smart_ptr : yes (cached) [2] - native atomic int32 supported : yes (cached) [2] - native syslog supported : yes (cached) [2] - pthread supports robust mutexes : no (cached) [2] - Boost.Regex is header-only : yes (cached) [2] - lockfree boost::atomic_flag : yes (cached) [2] - gcc visibility : yes (cached) [2] - sfinae_expr : yes (cached) [2] - cxx11_unified_initialization_syntax : yes (cached) [2] - cxx11_hdr_initializer_list : yes (cached) [2] - cxx11_hdr_chrono : yes (cached) [2] - cxx11_numeric_limits : yes (cached) [2] - cxx11_hdr_array : yes (cached) [2] - cxx11_hdr_atomic : yes (cached) [2] - cxx11_allocator : yes (cached) [2] - cxx11_explicit_conversion_operators : yes (cached) [2] - cxx14_decltype_auto : yes (cached) [2] - cxx14_generic_lambdas : yes (cached) [2] - cxx14_return_type_deduction : yes (cached) [2] - cxx14_variable_templates : yes (cached) [2] - long double support : yes (cached) [2] warning: skipping optional Message Passing Interface (MPI) library. note: to enable MPI support, add "using mpi ;" to user-config.jam. note: to suppress this message, pass "--without-mpi" to bjam. note: otherwise, you can safely ignore this message. - Has Large File Support : yes (cached) [2] - Has attribute init_priority : yes (cached) [2] - has_icu builds : no (cached) [2] - std_wstreambuf builds : yes (cached) [2] - std_wstreambuf : yes (cached) [2] - cxx11_rvalue_references : yes (cached) [3] - libbacktrace builds : no (cached) [2] - cxx11_rvalue_references : yes (cached) [4] - libbacktrace builds : no (cached) [4] - addr2line builds : yes (cached) [2] - WinDbg builds : no (cached) [2] - WinDbg builds : no (cached) [4] - WinDbgCached builds : no (cached) [2] - WinDbgCached builds : no (cached) [4] - BOOST_COMP_GNUC >= 4.3.0 : no (cached) [2] - BOOST_COMP_GNUC >= 4.3.0 : no (cached) [3] - cxx11_hdr_thread : yes (cached) [2] - cxx11_hdr_regex : yes (cached) [2] - cxx11_static_assert : yes (cached) [3] - cxx11_variadic_templates : yes (cached) [3] - cxx11_decltype : yes (cached) [3] - GCC libquadmath and __float128 support : no (cached) [3] - cxx11_hdr_ratio : yes (cached) [3] - cxx11_template_aliases : yes (cached) [3] - cxx11_char16_t : yes (cached) [3] - cxx11_char32_t : yes (cached) [3] - cxx20_hdr_concepts : yes (cached) [3] - cpp_lib_memory_resource : yes (cached) [3] - has std::atomic_ref : no (cached) [3] - has statx : no (cached) [3] - has statx syscall : no (cached) [3] - cxx11_scoped_enums : yes (cached) [3] - cxx11_noexcept : yes (cached) [3] - cxx11_nullptr : yes (cached) [3] - cxx11_defaulted_functions : yes (cached) [3] - cxx11_defaulted_moves : yes (cached) [3] - cxx11_deleted_functions : yes (cached) [3] - cxx11_function_template_default_args : yes (cached) [3] - cxx11_final : yes (cached) [3] - cxx11_override : yes (cached) [3] - has init_priority attribute : yes (cached) [3] - has stat::st_blksize : no (cached) [3] - has stat::st_mtim : no (cached) [3] - has stat::st_mtimensec : no (cached) [3] - has stat::st_mtimespec : yes (cached) [3] - has stat::st_birthtim : no (cached) [3] - has stat::st_birthtimensec : no (cached) [3] - has stat::st_birthtimespec : yes (cached) [3] - has fdopendir(O_NOFOLLOW) : yes (cached) [3] - has dirent::d_type : yes (cached) [3] - has POSIX *at APIs : no (cached) [3] - has fallocate : no (cached) [3] - cxx11_auto_declarations : yes (cached) [3] - cxx11_constexpr : yes (cached) [3] - cxx11_hdr_mutex : yes (cached) [3] - cxx11_hdr_tuple : yes (cached) [3] - cxx11_lambdas : yes (cached) [3] - cxx11_thread_local : yes (cached) [3] - zlib : yes (cached) [3] - bzip2 : yes (cached) [3] - lzma : yes (cached) [3] - zstd : yes (cached) [3] - has_lzma_cputhreads builds : yes (cached) [3] - cxx11_basic_alignas : yes (cached) [3] - icu : no (cached) [3] - iconv (libc) : no (cached) [3] - iconv (separate) : yes (cached) [3] - cxx11_hdr_functional : yes (cached) [3] - cxx11_hdr_type_traits : yes (cached) [3] - cxx11_range_based_for : yes (cached) [3] - cxx11_smart_ptr : yes (cached) [3] - native atomic int32 supported : yes (cached) [3] - native syslog supported : yes (cached) [3] - pthread supports robust mutexes : no (cached) [3] - Boost.Regex is header-only : yes (cached) [3] - lockfree boost::atomic_flag : yes (cached) [3] - gcc visibility : yes (cached) [3] - sfinae_expr : yes (cached) [3] - cxx11_unified_initialization_syntax : yes (cached) [3] - cxx11_hdr_initializer_list : yes (cached) [3] - cxx11_hdr_chrono : yes (cached) [3] - cxx11_numeric_limits : yes (cached) [3] - cxx11_hdr_array : yes (cached) [3] - cxx11_hdr_atomic : yes (cached) [3] - cxx11_allocator : yes (cached) [3] - cxx11_explicit_conversion_operators : yes (cached) [3] - cxx14_decltype_auto : yes (cached) [3] - cxx14_generic_lambdas : yes (cached) [3] - cxx14_return_type_deduction : yes (cached) [3] - cxx14_variable_templates : yes (cached) [3] - long double support : yes (cached) [3] - Has Large File Support : yes (cached) [3] - Has attribute init_priority : yes (cached) [3] - has_icu builds : no (cached) [3] - std_wstreambuf builds : yes (cached) [3] - std_wstreambuf : yes (cached) [3] - libbacktrace builds : no (cached) [3] - cxx11_rvalue_references : yes (cached) [5] - libbacktrace builds : no (cached) [5] - addr2line builds : yes (cached) [3] - WinDbg builds : no (cached) [3] - WinDbg builds : no (cached) [5] - WinDbgCached builds : no (cached) [3] - WinDbgCached builds : no (cached) [5] - cxx11_hdr_thread : yes (cached) [3] - cxx11_hdr_regex : yes (cached) [3] [1] clang-18 [2] clang-darwin-18/release/arm_64/cxxstd-20-iso/python-3.11/threading-multi/visibility-hidden [3] clang-darwin-18/release/arm_64/cxxstd-20-iso/link-static/python-3.11/threading-multi/visibility-hidden [4] clang-darwin-18/release/arm_64/build-no/cxxstd-20-iso/python-3.11/threading-multi/visibility-hidden [5] clang-darwin-18/release/arm_64/build-no/cxxstd-20-iso/link-static/python-3.11/threading-multi/visibility-hidden Component configuration: - atomic : building - charconv : building - chrono : building - cobalt : building - container : building - context : building - contract : building - coroutine : building - date_time : building - exception : building - fiber : building - filesystem : building - graph : building - graph_parallel : building - headers : building - iostreams : building - json : building - locale : building - log : building - math : building - mpi : building - nowide : building - process : building - program_options : building - python : building - random : building - regex : building - serialization : building - stacktrace : building - system : building - test : building - thread : building - timer : building - type_erasure : building - url : building - wave : building - predef : building ...patience... ...patience... ...patience... ...patience... ...patience... ...patience... ...patience... ...found 17870 targets... ...updating 24 targets... clang-darwin.link.dll bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_cobalt.dylib ld: warning: -single_module is obsolete ld: warning: -single_module is obsolete Undefined symbols for architecture arm64: "std::exception_ptr::__from_native_exception_pointer(void*)", referenced from: std::exception_ptr std::make_exception_ptr[abi:ne180100](boost::system::error_code) in exception.o boost::asio::detail::thread_info_base::capture_current_exception() in main.o "___cxa_init_primary_exception", referenced from: std::exception_ptr std::make_exception_ptr[abi:ne180100](boost::system::error_code) in exception.o boost::asio::detail::thread_info_base::capture_current_exception() in main.o ld: symbol(s) not found for architecture arm64 clang++: error: linker command failed with exit code 1 (use -v to see invocation) "clang++" -o "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_cobalt.dylib" -Wl,-install_name -Wl,"@rpath/libboost_cobalt.dylib" -dynamiclib -single_module "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/detail/exception.o" "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/detail/util.o" "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/channel.o" "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/error.o" "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/main.o" "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/this_thread.o" "bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/thread.o" -fPIC -std=c++20 -fvisibility=hidden -fvisibility-inlines-hidden -m64 --target=arm64-apple-darwin ...failed clang-darwin.link.dll bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_cobalt.dylib... clang-darwin.link.dll bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_log.dylib ld: warning: -single_module is obsolete ld: warning: -single_module is obsolete Undefined symbols for architecture arm64: "std::exception_ptr::__from_native_exception_pointer(void*)", referenced from: boost::asio::detail::thread_info_base::capture_current_exception() in syslog_backend.o "___cxa_init_primary_exception", referenced from: boost::asio::detail::thread_info_base::capture_current_exception() in syslog_backend.o ld: symbol(s) not found for architecture arm64 clang++: error: linker command failed with exit code 1 (use -v to see invocation) "clang++" -o "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_log.dylib" -Wl,-install_name -Wl,"@rpath/libboost_log.dylib" -dynamiclib -single_module "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/attribute_name.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/attribute_set.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/attribute_value_set.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/code_conversion.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/core.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/record_ostream.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/severity_level.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/global_logger_storage.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/named_scope.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/process_name.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/process_id.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/thread_id.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/timer.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/exceptions.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/default_attribute_names.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/default_sink.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/text_ostream_backend.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/text_file_backend.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/text_multifile_backend.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/thread_specific.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/once_block.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/timestamp.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/threadsafe_queue.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/event.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/trivial.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/spirit_encoding.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/format_parser.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/date_time_format_parser.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/named_scope_format_parser.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/permissions.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/dump.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/posix/ipc_reliable_message_queue.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/posix/object_name.o" "bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/syslog_backend.o" "bin.v2/libs/chrono/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_chrono.dylib" "bin.v2/libs/filesystem/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_filesystem.dylib" "bin.v2/libs/thread/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_thread.dylib" "bin.v2/libs/atomic/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_atomic.dylib" -fPIC -std=c++20 -fvisibility=hidden -fvisibility-inlines-hidden -m64 --target=arm64-apple-darwin ...failed clang-darwin.link.dll bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_log.dylib... ...skipped

libboost_log.dylib for lack of libboost_log.dylib... ...skipped libboost_log_setup.dylib for lack of libboost_log.dylib... ...skipped

libboost_log_setup.dylib for lack of libboost_log_setup.dylib... ...skipped stage/boost_log_setup-config.cmake for lack of libboost_log_setup.dylib... ...skipped

boost_log_setup-config.cmake for lack of stage/boost_log_setup-config.cmake... ...skipped stage/boost_log_setup-config-version.cmake for lack of libboost_log_setup.dylib... ...skipped

boost_log_setup-config-version.cmake for lack of stage/boost_log_setup-config-version.cmake... ...skipped libboost_log_setup-variant-shared.cmake for lack of libboost_log_setup.dylib... ...skipped

libboost_log_setup-variant-shared.cmake for lack of libboost_log_setup-variant-shared.cmake... ...skipped stage/boost_log-config.cmake for lack of libboost_log.dylib... ...skipped

boost_log-config.cmake for lack of stage/boost_log-config.cmake... ...skipped stage/boost_log-config-version.cmake for lack of libboost_log.dylib... ...skipped

boost_log-config-version.cmake for lack of stage/boost_log-config-version.cmake... ...skipped libboost_log-variant-shared.cmake for lack of libboost_log.dylib... ...skipped

libboost_log-variant-shared.cmake for lack of libboost_log-variant-shared.cmake... ...skipped

libboost_cobalt.dylib for lack of libboost_cobalt.dylib... ...skipped stage/boost_cobalt-config.cmake for lack of libboost_cobalt.dylib... ...skipped

boost_cobalt-config.cmake for lack of stage/boost_cobalt-config.cmake... ...skipped stage/boost_cobalt-config-version.cmake for lack of libboost_cobalt.dylib... ...skipped

boost_cobalt-config-version.cmake for lack of stage/boost_cobalt-config-version.cmake... ...skipped libboost_cobalt-variant-shared.cmake for lack of libboost_cobalt.dylib... ...skipped

libboost_cobalt-variant-shared.cmake for lack of libboost_cobalt-variant-shared.cmake... ...skipped 22 targets...

boost_cobalt-config-version.cmake

boost_cobalt-config.cmake

libboost_cobalt-variant-shared.cmake

boost_log-config-version.cmake

boost_log-config.cmake

libboost_log-variant-shared.cmake

boost_log_setup-config-version.cmake

boost_log_setup-config.cmake

libboost_log_setup-variant-shared.cmake

libboost_cobalt.dylib

libboost_log.dylib

libboost_log_setup.dylib libboost_cobalt-variant-shared.cmake stage/boost_cobalt-config-version.cmake stage/boost_cobalt-config.cmake libboost_log-variant-shared.cmake libboost_log_setup-variant-shared.cmake libboost_log_setup.dylib stage/boost_log-config-version.cmake stage/boost_log-config.cmake stage/boost_log_setup-config-version.cmake stage/boost_log_setup-config.cmake ...failed updating 2 targets... clang-darwin.link.dll bin.v2/libs/cobalt/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_cobalt.dylib clang-darwin.link.dll bin.v2/libs/log/build/clang-darwin-18/release/arm_64/cxxstd-20-iso/threading-multi/visibility-hidden/libboost_log.dylib ```

What did you expect to happen?

I expected the libraries to build fine without the linker error. Building using homebrew GCC14 (toolset=gcc-14) or Xcode provided clang (toolset=darwin) successfully builds the libraries.

Step-by-step reproduction instructions (by running brew commands)

1) Download the source from: https://archives.boost.io/beta/1.86.0.beta1/source/
2) tar -xzvf boost_1_86_0_b1_rc4.tar
3) cd boost_1_86_0
4) ./bootstrap.sh
5) ./b2 cxxstd=20 toolset=clang --stage
carlocab commented 1 month ago

Can you try adding

-L"$(brew --prefix llvm)/lib/c++" -L"$(brew --prefix llvm)/lib" -lunwind

to cxxflags when building to see if it helps?

mborland commented 1 month ago

Can you try adding

-L"$(brew --prefix llvm)/lib/c++" -L"$(brew --prefix llvm)/lib" -lunwind

to cxxflags when building to see if it helps?

With those flags added to linkflags the libraries successfully build. Full command is now:

./b2 cxxstd=20 toolset=clang --stage linkflags="-L"$(brew --prefix llvm)/lib/c++" -L"$(brew --prefix llvm)/lib" -lunwind"
carlocab commented 1 month ago

Good to know, thanks. Do you consider this issue resolved?

The solution isn't ideal, but making it better could prove a little painful for some other users...

mborland commented 1 month ago

Good to know, thanks. Do you consider this issue resolved?

The solution isn't ideal, but making it better could prove a little painful for some other users...

Do you expect this to be a temporary or permanent workaround? Previous versions of homebrew LLVM worked fine out of the box and there's now a few other issues elsewhere pointing to this one.

cho-m commented 1 month ago

Previous versions of homebrew LLVM worked fine out of the box

Just noting that similar issues could have (and did) happen with previous LLVM versions depending on how old the version of Xcode's LLVM was. The root cause is mixing of different LLVM headers and libraries is not officially supported.

LLVM 18 specifically introduced changes to std::make_exception_ptr so any code that uses it hits the failure when linking to Xcode's libc++.

A prior situation was LLVM 15/16 introducing verbose abort feature (which impacted Monterey and older), e.g. https://github.com/llvm/llvm-project/issues/87590

carlocab commented 1 month ago

Yes, the issue seems to be that LLVM prioritises use of its included C++ headers when it has no guarantee that it will be linking with a compatible libc++. For a long time this didn't cause anyone problems. I'm not sure if this was by chance, or if there's been a policy change upstream.