I've been trying out Vulkan, even though my GPU does not support it.
What did I learn?
1. I found out that apparently the Vulkan loader shits itself if the executable that calls it exports the same symbols as Vulkan. libGL does not do this.
2. I learnt that my executables actually have bunch of symbols in .dynsym. It seems GCC/Clang likes to put global symbols into .dynsym if the executable links to a shared library that exports those symbols. I wish it didn't do that. I solved the problem by renaming the affected variables.
Once again I was bitten in my ass due to linkers being wonky. This problem would not have occurred had the linker worked differently. If nothing would be imported/exported without explicit user direction, I don't think linking problems would be so annoying or common.
Is there any reason (other than Unix autism) why image files do not specify the library from which a symbol is loaded? It sounds retarded to have some kind of load priority, when one could just specify the library manually.