Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix linking the outputs of the compilation (dotnet#76)
Before this change, running link.exe on the output of the compilation produced `LINK : fatal error LNK1561: entry point must be defined`. This took longer to figure out than I would be willing to admit. There are two things at play - linker uses the presence of a method named `main` or `wmain` to choose between setting `wmainCRTStartup` or `mainCRTStartup` as the actual entrypoint of the application (C apps don't start with `main` - they start in the C runtime library that calls `main`). In dotnet#21 we deleted the `__fail_fast` method from main.cpp and then in dotnet#72 we also removed the compiler reference to the now non-existent symbol. The obscure result of that was that main.obj stopped being part of the linking set because nothing now references symbols from it. When linker looks for `main` or `wmain`, it only looks at object files that are already part of the linking set. As a result, linker didn't inject `wmainCRTStartup` as the entrypoint and we failed with the above message. It looks like the only way out is to hardcode the CRT implementation detail here. We were already hardcoding it, but for other reasons. We also need to set the subsystem since the autodetection is failing.
- Loading branch information