Разработчики нашей команды используют в основном компьютеры Mac, а на целевых серверах работает Ubuntu. После того, как мы столкнулись с тонкими различиями в компиляторе и библиотеках между платформами, мы решили стандартизировать LLVM 17 по всем направлениям (clang, libc++, lldb, все работает).
До этого я использовал Apple Clang из инструментов командной строки Xcode и до сих пор установил его. После перехода я использую LLVM@17 от Homebrew
Продукт состоит из кода C++, связанного с несколькими сторонними библиотеками (grpc, redis, pqxx и т. д.), которые также были собраны локально из источник с использованием тех же инструментов. Наш код скомпилирован как -std=c++23, но некоторые библиотеки были скомпилированы в соответствии с предыдущим стандартом из-за несовместимости.
Проблема:
При создании исполняемого файла с помощью Address Sanitizer и его локальном запуске происходит сбой со следующим выводом:
Код: Выделить всё
/opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16: runtime error: call to function std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) through pointer to incorrect function type 'std::from_chars_result (*)(const char *, const char *, unsigned long long &)'
(server:arm64+0x10083d154): note: std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) defined here
#0 0x1011a4df4 in std::__1::from_chars_result std::__1::__sign_combinator[abi:ue170006](char const*, char const*, long long&, std::__1::from_chars_result (*)(char const*, char const*, unsigned long long&))+0x278 (server:arm64+0x1011a4df4)
#1 0x1011a4a7c in std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, long long&)+0x188 (server:arm64+0x1011a4a7c)
#2 0x102730a90 in pqxx::internal::integral_traits::from_string(std::__1::basic_string_view)+0x54 (server:arm64+0x102730a90)
#3 0x100748320 in long long pqxx::from_string(std::__1::basic_string_view)+0x1b4 (server:arm64+0x100748320)
[... more stack frames here ...]
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16 in
Аналогично, таких ошибок нет, когда исполняемый файл запускается в Ubuntu (целевой серверы, среда сборки или разработчики, использующие WSL2 под Windows)
Мысли:[/b]
Я подозреваю, что это могло иметь что-то связано с тем, что исполняемый файл загружает две версии Библиотеки libc++ и libc++abi (Apple/Xcode и Homebrew/LLVM).
При работе под отладчиком я вижу, что обе загружены:
Код: Выделить всё
Stop reason: Function type mismatch
Stop reason: signal SIGABRT
image list
[ 0] 4C4C44F0-5555-3144-A1BA-7CD98681E0B4 0x0000000100000000 /Users/oren/work/server-2/build/server/server
[ 1] 4CE86D18-F3FA-3D2A-A1B8-E7CD8A52FB0D 0x000000018c0de000 /usr/lib/dyld
[ 2] 86BB7A29-1B92-38E5-A47D-7AD8FA8E9C19 0x00000001127bc000 /opt/homebrew/Cellar/llvm@17/17.0.6/lib/c++/libc++.1.0.dylib
[ 3] 59CB7CE8-1EB3-3DBE-98C8-DB08E836312D 0x0000000112c64000 /opt/homebrew/Cellar/llvm@17/17.0.6/lib/clang/17/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
... more lines ...
[ 42] 17A73968-9D77-3CC1-8382-84292D845617 0x0000000199fed000 /usr/lib/system/libunwind.dylib
[ 47] 6477CE88-B069-395C-B258-7C6162AD5257 0x000000018c407000 /usr/lib/libc++abi.dylib
[ 48] 6CCA803C-BBBE-3265-889E-AF4F60CAFD5D 0x000000026bee9000 /usr/lib/liboah.dylib
[ 49] FE5F2FBB-D3B5-30BC-BAD8-3571AC2A72A0 0x000000018c379000 /usr/lib/libc++.1.dylib
... many more lines ...
[301] 7AA0CBE1-6414-34F0-AE51-1071BE00C574 0x00000001125e0000 /opt/homebrew/Cellar/llvm@17/17.0.6/lib/c++/libc++abi.1.0.dylib
2025-01-23 14:13:13.845486-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
2025-01-23 14:13:13.846495-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.846507-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.846718-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.846814-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.847835-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
2025-01-23 14:13:13.851894-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
2025-01-23 14:13:13.852247-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
2025-01-23 14:13:13.888734-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv121__vmi_class_type_infoE, N10__cxxabiv121__vmi_class_type_infoE.
2025-01-23 14:13:13.915920-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. St9type_info, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv117__class_type_infoE.
[... program log entries here ...]
2025-01-23 14:13:14.010867-0500 server[13655:110398063] dynamic_cast error 2: One or more of the following type_info's has hidden visibility or is defined in more than one translation unit. They should all have public visibility. N10__cxxabiv117__class_type_infoE, N10__cxxabiv120__si_class_type_infoE, N10__cxxabiv120__si_class_type_infoE.
/opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16: runtime error: call to function std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) through pointer to incorrect function type 'std::from_chars_result (*)(const char *, const char *, unsigned long long &)'
(server:arm64+0x10083d154): note: std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, unsigned long long&) defined here
#0 0x1011a4df4 in std::__1::from_chars_result std::__1::__sign_combinator[abi:ue170006](char const*, char const*, long long&, std::__1::from_chars_result (*)(char const*, char const*, unsigned long long&))+0x278 (server:arm64+0x1011a4df4)
#1 0x1011a4a7c in std::__1::from_chars_result std::__1::__from_chars_atoi[abi:ue170006](char const*, char const*, long long&)+0x188 (server:arm64+0x1011a4a7c)
#2 0x102730a90 in pqxx::internal::integral_traits::from_string(std::__1::basic_string_view)+0x54 (server:arm64+0x102730a90)
#3 0x100748320 in long long pqxx::from_string(std::__1::basic_string_view)+0x1b4 (server:arm64+0x100748320)
[... more stack frames here ...]
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /opt/homebrew/opt/llvm@17/bin/../include/c++/v1/__charconv/from_chars_integral.h:46:16 in
< /code>
Эти динамические ошибки отливки также не появляются, когда я строю исполняемый файл без Asan. Хотя простое включение ASAN может нести ответственность за аварии, это не объяснило бы, почему это никогда не происходит на Ubuntu. Библиотеки под другой версией стандарта C ++ - виноваты. MacOS 15.2 (и также обновляется инструменты xcode и командной строки Xcode).
и исключить отладчик как виновник, аварий также происходит при запуске программы из оболочки.
Я в настоящее время отключил Asan для местных сборки, но вместо этого я бы предпочел исправить (или обойти). < /p>
Подробнее здесь: https://stackoverflow.com/questions/793 ... nside-libc