<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/102443>102443</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang 17 vs clang 18+ and gcc 13 binaries linking problem
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zlojvavan
</td>
</tr>
</table>
<pre>
after upgrading ubuntu 23.10 to 24.04 and clang from 17 to 18 cannot build my grpc related projects with clang 18 (and newer) due to link time undefined symbol in debug config:
```
ld.lld: error: undefined symbol: absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<<<unsigned long, 0>(unsigned long const&)
referenced by log_message.h:132 (/opt/vcpkg/installed/x64-linux/include/absl/log/internal/log_message.h:132)
bin/server/CMakeFiles/lcs.dir/grpc.cpp.o:(absl::lts_20240116::log_internal::LogMessage::operator<<(unsigned long))
```
grpc (and abseil) were installed using vcpkg and gcc 13 and I've had no problems building my projects with either clang 17 or gcc 13, but not so with clang 18+
I can see differences in generated symbols between clang 17 and 18, there's missing "U absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <unsigned long, 0>(unsigned long const&)"
`~/.vs/LCS/out/build/linux-debug-clang-18/bin/reference/CMakeFiles/lcsref.dir$ nm grpc.cpp.o -C | grep LogMessage::operator
0000000000000000 W absl::lts_20240116::log_internal::LogMessage::operator<<(unsigned long)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <19>(char const (&) [19])
`
vs
`~/.vs/LCS/out/build/linux-debug-clang-17/bin/reference/CMakeFiles/lcsref.dir$ nm grpc.cpp.o -C | grep LogMessage::operator
0000000000000000 W absl::lts_20240116::log_internal::LogMessage::operator<<(unsigned long)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <19>(char const (&) [19])
U absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <unsigned long, 0>(unsigned long const&)`
corresponding abseil lib indeed has those templated operator << versions (including <unsigned long, 0>) declared in abseil log_message.h as
```
// Types that support `AbslStringify()` are serialized that way.
template <typename T,
typename std::enable_if<absl::HasAbslStringify<T>::value,
int>::type = 0>
LogMessage& operator<<(const T& v) ABSL_ATTRIBUTE_NOINLINE;
// Types that don't support `AbslStringify()` but do support streaming into a
// `std::ostream&` are serialized that way.
template <typename T,
typename std::enable_if<!absl::HasAbslStringify<T>::value,
int>::type = 0>
LogMessage& operator<<(const T& v) ABSL_ATTRIBUTE_NOINLINE;
```
`/opt/vcpkg/installed/x64-linux/lib$ nm libabsl_log_internal_message.a -C | grep LogMessage::operator
0000000000000da0 T absl::lts_20240116::log_internal::LogMessage::operator<<(std::ostream& (*)(std::ostream&))
00000000000000fa t absl::lts_20240116::log_internal::LogMessage::operator<<(std::ostream& (*)(std::ostream&)) [clone .cold]
0000000000000e20 T absl::lts_20240116::log_internal::LogMessage::operator<<(std::ios_base& (*)(std::ios_base&))
0000000000000120 t absl::lts_20240116::log_internal::LogMessage::operator<<(std::ios_base& (*)(std::ios_base&)) [clone .cold]
00000000000011b0 T absl::lts_20240116::log_internal::LogMessage::operator<<(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
0000000000001380 T absl::lts_20240116::log_internal::LogMessage::operator<<(std::basic_string_view<char, std::char_traits<char> >)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <signed char, 0>(signed char const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <bool, 0>(bool const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <char, 0>(char const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <double, 0>(double const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <float, 0>(float const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <unsigned char, 0>(unsigned char const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <int, 0>(int const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <unsigned int, 0>(unsigned int const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <long, 0>(long const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <unsigned long, 0>(unsigned long const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <void const*, 0>(void const* const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <void*, 0>(void* const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <short, 0>(short const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <unsigned short, 0>(unsigned short const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <long long, 0>(long long const&)
0000000000000000 W absl::lts_20240116::log_internal::LogMessage& absl::lts_20240116::log_internal::LogMessage::operator<< <unsigned long long, 0>(unsigned long long const&)`
so atm I'm unable to build my projects with clang-18+
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1v4jwW_jXm5qgocVI-LrigdKKtNO-stMOrvUROfAh-x7Ej26HDXOxvX9kJNFA62-22UiMtagEff53nPOfDxMxaUSrEBbm9I7f3I9a4nTaLX1L_tWd7pka55ocF2zo00NSlYVyoEpq8Ua4BmozjCJwGmo6jFJjiUEimStgaXUE89V3xDAqmlHaQN0JyqA5QmroAg5I55FAb_RcWzsKjcLtuejwDQmd-OYWPaAidA2_QryaF-gFOVAiN4rgVCjnYQ5VrCUIBx7wpodBqK0qSLEl0T6Lj-yTq_kJT8rGUnCRLQGO08V8uF_Qyllv_SZKldHZDI5pGcTzpJLrcCOXQKNaN-arLP9BaViKhk7fPDW1do2HOa7Zq_xoViOIgtSoJXUFEki-Ezs7kHrt1hE4InbdADW7RoCqQQ34Av2_VbjPekWQZJ9RbmtBM147QbF_UP0pCM6GsY1IiJzT7OUlvpFDNzyAvZMOR0Cygo5nU7fAOShBc7nDSBXKhCM0smr0nNVv9wX5gJiRaP7GwYy682LvHuKjrsfamoLN3NeSFwbxuR_UuXKR9D77aOSPLLQrpvfERDcLJSNBYHxTBeCEIyqKAOAlfHwid7hF2jIPS3tlziZVtY8FPqg4XEYDC7dAcA2EK2nTLec7zxoEPJavPw4XQu77SDz7kwCICF9uOf-sDpETlrXHycQs5ukdE9bSfV9ovuAKvBxI6tVAJGxASSv_8NDEBbwoKSi-ywr8IzcZ774FfV999IDQ-EAI_3iu949-EvHITTHTjbZO1jnyKrSu-bHDbunMKqoInl4abFZDpCkqDNbwIMCgXXbzgn--bU66Ewrvv-wGcx_OW42LHTEttm8I8vUBu7-I5ub0_C-oe4Xv7v9I__T_9A6IfLl9Dz1_n7lxoY9DWWoVa0tYnkCIHoTgihx2z4HbaIjis6vbAddQCOjX2aKzQynoztvU9pPoXlZsDx0Iyg9xXlOOe_bIP7DLK-nUVCM0IzWB9qNFrxxzYpq61cUAm0TK38rszQpViewjEeszADIJFI5gUv5C3sx7ZYXxk-QjP6-0ONSpWIawJXXUDTjLreEsGKpZL3IgtSVZPtP6N2XMNktXaow6deyYbfFpTKHfq8usDSe5bG3VKnfvOs_BrnXft-_berMu77183y_X6Hw93f66_bL79_eHb14dvX0hyVtvhiv24VoROX2NHf4Dg-jTQOoOs8nwL5TSwiy3IJDrZS7djvRu-Ax-91--pITQeEjtXz5C--doTthR5VzSkyD3yTT-vnGKMvbWQcBbB-r0LyRUnaZPyMhy5rvX3D97n9WbLwH0aBX1FKaRWCONCS-5Ly3OVkX6kTYW2m5xZfFHn3oAXrRrT6AOt-t-r-Bq7xnH-kXbdbIqfP-O4beTMimJjQ2IhycofLnzFOw32go0zTDh77Pa1sDeCSamLbqeuH_z_s1_kZxCT2UdC7KPa7AU-vhoatKV-ECfC7pRyBNYdoXrS33PwCRHlWsseFN8cHIYLOgbJA9dNLrGHohUMDsdWauZ6MEJ7cChOv0cuXOtMPjhU_pz6hEWoAfNyDqUvHhymi9_j15-tf3IMb7wx-OSo9lrwo9LLHqoz-SBRPcczRCR2p00_DYT24FCcYuQSznnH4HCFkL-W3AaZC84z2W_T3H94kGo1MFeF27oKmvD8CZx-urK-cksdboLuRnyR8HkyZyNcxFOaxHFEEzraLfgWMYlu82lUzDGNUp7yySSNooRHUTyZxCOxCAaYRbNonia3dLzFKbJpnEzyfJvSdErSCCsm5FjKfTXWphwJaxtcxBFN02QkWY7Shnt7SoNGhFJyez8yCz_hJm9KS9JICuvs0xJOOImL023f3vbvEPuXl7lQzAi04cpdqPJ4dzlqjFzsnKutZyU8JyyF2zX5uNAVoZnfqfu46axGaBY0t4RmnfL7Bf13AAAA__-E6Jzq">