Use _Static_assert under clang if available
Workaround strict-aliasing warning on older GCC regarding dlsym()

Use a struct to convert the data pointer returned by dlsym() to a
function pointer.