I am using `g++` to link in both working and failing cases. Oleg. On Mon, Jun 28, 2021 at 10:32 PM Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote: > > > On Tue, 29 Jun 2021, 05:58 Oleg Smolsky via Gcc-help, < > gcc-help@xxxxxxxxxxx> wrote: > >> Hi, I've just hit a peculiar linking issue when using std::unordered_map, >> C++17 and mixing some shared libs built with GCC10/11. Here is the linking >> issue: >> >> test.o: In function `__gnu_cxx::new_allocator<std: >> :__detail::_Hash_node_base*>::allocate(unsigned long, void const*)': >> /opt/gcc-11/include/c++/11.1.0/ext/new_allocator.h:110: undefined >> reference >> to `std::__throw_bad_array_new_length()' >> collect2: error: ld returned 1 exit status >> >> The reproducer looks benign to me: >> >> struct Thing { int a, b, c; }; >> int main(int argc, char **argv) { >> std::unordered_map<unsigned int, Thing *> map; >> map[1] = new Thing; >> } >> >> I hit the linking issue when the reproducer is built with GCC11 and I >> link libzmq.so.3 that was built with GCC10. This is all happening on a >> 64-bit Linux VM and I built both compilers on the same OS (Ubuntu 16). The >> issue goes away when I rebuild the 3rd-party lib with GCC11... yet I am >> failing to understand why this is happening... Is this an oversight in >> libstdc++ that results in an ABI break? >> > > Are you using 'gcc' to link, not 'g++'? > > >