All these use Linux/Unix. A lot of embedded systems are included and with them it's the same situation I know. These use glibc or an Unix libc. It depends on the C library used and only indirectly on the architecture (if it is 32 bit or 64 bit). This is also why in MinGW `sizeof(long)` is 4 bytes.
What about checking if `__linux__` or `__unix__` is defined and only using for them `(void *)strtoul()`?