The binary types are different. For example, Linux may use the Executable and Linkable format, while Windows uses Portable Executable format.
But the biggest problems are the API's. A Windows program would call a Windows API to set up it's process, like stack, and allocate memory. Obivously those API calls are not available on other operating systems.