Thread overview
windows: imported functions in empty program executable
Feb 19, 2021
novice2
Feb 20, 2021
kinke
Feb 20, 2021
kinke
Feb 20, 2021
novice2
February 19, 2021
LDC - the LLVM D compiler (1.25.0-beta1)

File test.d contain one line:
void main () {}

Compiled to test.exe by command:
ldc2 -release -O3 test.d

Result test.exe imported many functions, for example delete registry, networking.
Is this bug, or i can change something to avoid this imports?

> dumpbin /imports test.exe

'...' - skipped lines

Dump of file test.exe
File Type: EXECUTABLE IMAGE
 Section contains the following imports:
 ...
    WS2_32.dll
       ...
       1E WSACleanup
       2F WSAGetLastError
       3A WSAIoctl
       58 WSAStartup
       A1 accept
       A2 bind
       A3 closesocket
       A4 connect
       A7 gethostbyaddr
       A8 gethostbyname
       AB getpeername
       AC getprotobyname
       AD getprotobynumber
       AE getservbyname
       AF getservbyport
       B0 getsockname
       B1 getsockopt
       B2 htonl
       B4 inet_addr
       B5 inet_ntoa
       B8 ioctlsocket
       B9 listen
       BA ntohl
       BB ntohs
       BC recv
       BD recvfrom
       BF send
       C0 sendto
       C1 setsockopt
       C2 shutdown
       C3 socket
    ...
    ADVAPI32.dll
       25B RegCloseKey
       264 RegCreateKeyExW
       26F RegDeleteKeyW
       273 RegDeleteValueW
       27A RegEnumKeyExW
       27D RegEnumValueW
       27E RegFlushKey
       28C RegOpenKeyExW
       28F RegOpenKeyW
       293 RegQueryInfoKeyW
       299 RegQueryValueExW
       2A9 RegSetValueExW

February 20, 2021
On Friday, 19 February 2021 at 19:29:43 UTC, novice2 wrote:
> LDC - the LLVM D compiler (1.25.0-beta1)
>
> File test.d contain one line:
> void main () {}
>
> Compiled to test.exe by command:
> ldc2 -release -O3 test.d
>
> Result test.exe imported many functions, for example delete registry, networking.
> Is this bug, or i can change something to avoid this imports?

You've apparently used the bundled MinGW-w64-based libs, not an MSVC toolchain, which somehow results in deps on WS2_32.dll and ADVAPI32.dll. With VS 2019 on my box, the dummy executable only depends on kernel32.dll. LDC defaults to linking the MSVC runtime statically if an MSVC toolchain is available (see -mscrtlib switch).
February 20, 2021
On Saturday, 20 February 2021 at 06:10:38 UTC, kinke wrote:
> You've apparently used the bundled MinGW-w64-based libs [...]

It has apparently nothing to do with those libs, but with using the LLD linker instead of the MS linker. With the static MSVC libs, I still get these 2 extra DLL deps when using `-link-internally`.
February 20, 2021
On Saturday, 20 February 2021 at 06:14:53 UTC, kinke wrote:
> On Saturday, 20 February 2021 at 06:10:38 UTC, kinke wrote:
>> You've apparently used the bundled MinGW-w64-based libs [...]

so, this is problem with mingw and llvm linker...