lld-link: error: subsystem must be defined

Mike Parker aldacron at gmail.com
Sat May 9 02:43:46 UTC 2020


On Friday, 8 May 2020 at 21:00:12 UTC, WhatMe Worry wrote:
>
>
> This is a beginner's question but how to I get past this?
>
> C:\Users\Kyle\AppData\Local\dub\packages\arsd-official-7.2.0\arsd-official>lld-link terminal.obj
>
> lld-link: error: subsystem must be defined
>
> help mentions this option, but
>  /subsystem:<value>      Specify subsystem
>
> Is there a good tutorial for ldc2 because I haven't been able 
> to find anything.

No matter the linker one uses (OPTLINK, MS link, lld), there are 
two "subsystems" for Windows program: Windows and Console. The 
latter starts with console window, the former does not.

Generally, when using the Windows subsystem, WinMain is required 
(and in D, DRuntime must be manually initialized). When using the 
Console subsystem, main is required. OPTLINK, however, will 
accept main with the Windows subsystem just fine. MS link can be 
configured with the /ENTRY flag to accept either main or WinMain 
in either subsystem (e.g., /SUBSYSTEM:WINDOWS 
/ENTRY:mainCRTStartup).

So for lld, you'll want /subsystem:windows for no console window 
or /subsystem:console if you want the console. You can still use 
main with /subsystem:windows by also passing /entry:main.


More information about the digitalmars-d-ldc mailing list