While there is a .fini section in libomp.so, the FINI tag in .dynamic is 0x0: $ readelf -d /usr/lib64/libomp.so Dynamic section at offset 0xeec80 contains 32 entries: Tag Type Name/Value [...] 0x000000000000000c (INIT) 0x1af00 0x000000000000000d (FINI) 0x0 [...] That's why we are reading an offset of zero. Now why does that happen? In openmp/runtime/cmake/LibompHandleFlags.cmake there is a flag added to LDFLAGS: -Wl,-fini=__kmp_internal_end_fini Now without ThinLTO (which I activated with LLVM 9), this works fine, but with ThinLTO the FINI either doesn't appear (with ld.bfd and ld.lld) or is 0x0 (with ld.gold). That could be a bug in the ThinLTO linker plugin, or maybe -fini is not supported there. I'm a bit puzzled that the symbol doesn't appear at all in the final binary, and I fear that it might be optimized out. (LTO has a habit of doing that, but in this case it shouldn't...)