Skip to content

lld-link: error: failed to write the output file: permission denied #3675

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
top398 opened this issue Feb 22, 2021 · 6 comments
Closed

lld-link: error: failed to write the output file: permission denied #3675

top398 opened this issue Feb 22, 2021 · 6 comments

Comments

@top398
Copy link

top398 commented Feb 22, 2021

When compiling a (simple) D program, LDC 1.25.0 show:
lld-link: error: failed to write the output file: permission denied
And no executable generated but xxx.exe.xxxxxxx. In 1.24.0, no such error.
The OS is Win7 x64, FS is NTFS.

@kinke
Copy link
Member

kinke commented Feb 22, 2021

Use -v to see the linker cmdline which should show what's happening (especially, where it's trying to write the linked executable).

@top398
Copy link
Author

top398 commented Feb 22, 2021

Sorry about duplication issue commit.

the -v dumps:

binary E:\ldc2-1.25.0-windows-multilib\bin\ldc2.exe
version 1.25.0 (DMD v2.095.1, LLVM 11.0.1)
config E:\ldc2-1.25.0-windows-multilib\etc\ldc2.conf (x86_64-pc-windows-msvc)
predefs LDC all D_Version2 assert D_ModuleInfo D_Exceptions D_TypeInfo X86_64 D_InlineAsm_X86_64 D_HardFloat LittleEndian D_LP64 D_PIC Windows Win64 CRuntime_Microsoft CppRuntime_Microsoft LDC_LLVM_1100
parse dlg
importall dlg
import object (E:\ldc2-1.25.0-windows-multilib\bin..\import\object.d)
import core.internal.hash (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\hash.d)
import core.internal.traits (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\traits.d)
import core.internal.entrypoint (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\entrypoint.d)
import core.internal.array.appending (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\array\appending.d)
import core.internal.array.comparison (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\array\comparison.d)
import core.internal.array.equality (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\array\equality.d)
import core.internal.array.casting (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\array\casting.d)
import core.internal.array.concatenation (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\array\concatenation.d)
import core.internal.array.construction (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\array\construction.d)
import core.internal.array.capacity (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\array\capacity.d)
import core.internal.dassert (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\dassert.d)
import core.atomic (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\atomic.d)
import core.internal.attributes (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\attributes.d)
import core.internal.atomic (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\atomic.d)
import ldc.intrinsics (E:\ldc2-1.25.0-windows-multilib\bin..\import\ldc\intrinsics.di)
import core.internal.destruction (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\destruction.d)
import core.internal.moving (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\moving.d)
import core.internal.postblit (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\postblit.d)
import core.internal.switch_ (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\switch_.d)
import core.sys.windows.windows (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\windows.d)
import core.sys.windows.w32api (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\w32api.d)
import core.sys.windows.core (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\core.d)
import core.sys.windows.windef (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\windef.d)
import core.sys.windows.winnt (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winnt.d)
import core.sys.windows.basetsd (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\basetsd.d)
import core.sys.windows.winerror (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winerror.d)
import core.sys.windows.basetyps (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\basetyps.d)
import core.sys.windows.wincon (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\wincon.d)
import core.sys.windows.winbase (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winbase.d)
import core.stdc.stdarg (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\stdarg.d)
import core.sys.windows.winver (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winver.d)
import core.sys.windows.sdkddkver (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\sdkddkver.d)
import core.sys.windows.wingdi (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\wingdi.d)
import core.sys.windows.winuser (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winuser.d)
import core.sys.windows.winnls (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winnls.d)
import core.sys.windows.winnetwk (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winnetwk.d)
import core.sys.windows.winsvc (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winsvc.d)
import core.sys.windows.cderr (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\cderr.d)
import core.sys.windows.dde (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\dde.d)
import core.sys.windows.ddeml (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\ddeml.d)
import core.sys.windows.dlgs (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\dlgs.d)
import core.sys.windows.imm (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\imm.d)
import core.sys.windows.lzexpand (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\lzexpand.d)
import core.sys.windows.mmsystem (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\mmsystem.d)
import core.stdc.stdio (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\stdio.d)
import core.stdc.stdint (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\stdint.d)
import core.stdc.config (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\config.d)
import core.stdc.stddef (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\stddef.d)
import core.stdc.signal (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\signal.d)
import core.stdc.wchar_ (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\wchar_.d)
import core.stdc.time (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\stdc\time.d)
import core.sys.windows.stdc.time (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\stdc\time.d)
import core.sys.windows.nb30 (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\nb30.d)
import core.sys.windows.rpc (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\rpc.d)
import core.sys.windows.unknwn (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\unknwn.d)
import core.sys.windows.objfwd (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\objfwd.d)
import core.sys.windows.objidl (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\objidl.d)
import core.sys.windows.oleidl (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\oleidl.d)
import core.sys.windows.wtypes (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\wtypes.d)
import core.sys.windows.rpcndr (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\rpcndr.d)
import core.sys.windows.rpcnsip (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\rpcnsip.d)
import core.sys.windows.rpcdce (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\rpcdce.d)
import core.sys.windows.rpcdcep (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\rpcdcep.d)
import core.sys.windows.rpcnsi (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\rpcnsi.d)
import core.sys.windows.uuid (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\uuid.d)
import core.sys.windows.rpcnterr (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\rpcnterr.d)
import core.sys.windows.shellapi (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\shellapi.d)
import core.sys.windows.winperf (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winperf.d)
import core.sys.windows.commdlg (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\commdlg.d)
import core.sys.windows.prsht (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\prsht.d)
import core.sys.windows.winspool (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winspool.d)
import core.sys.windows.ole2 (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\ole2.d)
import core.sys.windows.objbase (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\objbase.d)
import core.sys.windows.cguid (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\cguid.d)
import core.sys.windows.oleauto (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\oleauto.d)
import core.sys.windows.oaidl (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\oaidl.d)
import core.sys.windows.olectlid (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\olectlid.d)
import core.sys.windows.winreg (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winreg.d)
import core.sys.windows.winsock2 (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\winsock2.d)
import core.sys.windows.imagehlp (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\imagehlp.d)
import core.sys.windows.dbghelp_types (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\sys\windows\dbghelp_types.d)
import core.runtime (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\runtime.d)
import core.internal.execinfo (E:\ldc2-1.25.0-windows-multilib\bin..\import\core\internal\execinfo.d)
semantic dlg
library kernel32
library kernel32
library version
library gdi32
library user32
library kernel32
library mpr
library advapi32
library user32
library user32
library imm32
library lz32
library winmm
library rpcrt4
library Rpcrt4
library rpcns4
library shell32
library comdlg32
library comctl32
library winspool
library ole32
library ole32
library oleaut32
library advapi32
library ws2_32
entry winmain dlg.d
semantic2 dlg
semantic3 dlg
GC stats 1M used, 4M free, 5M total
code dlg
lld-link /NOLOGO /OPT:REF /OPT:ICF /DEFAULTLIB:vcruntime140 /OUT:dlg.exe dlg.obj E:/ldc2-1.25.0-windows-multilib/bin/../lib64\ldc_rt.builtins.lib /LIBPATH:E:/ldc2-1.25.0-windows-multilib/bin/../lib64 /LIBPATH:E:/ldc2-1.25.0-windows-multilib/bin/../lib64/mingw phobos2-ldc.lib druntime-ldc.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib oldnames.lib legacy_stdio_definitions.lib

@kinke
Copy link
Member

kinke commented Feb 22, 2021

And no executable generated but xxx.exe.xxxxxxx. In 1.24.0, no such error.

So you're trying to create a dlg.exe in the current working dir (which I can't find in your post, but oh well). What do you mean by xxx.exe.xxxxxxx? Literally that or some dlg.exe.<some random suffix>? And you're sure the dlg.exe file isn't locked by another process?

Anyway, this is almost guaranteed not to have anything to do with LDC itself. It's the integrated LLD linker that fails to write the final .exe file; that has been bumped from v11.0.0 (LDC v1.24) to v11.0.1 with the new release, so you might have run into some LLD regression.

@top398
Copy link
Author

top398 commented Feb 23, 2021

Excuse me, I'd like to revise my description of the issue.

On a real NTFS disk E:, the generated file is dlg.obj.
On a virtual (Primo Ramdisk) NTFS disk R:, the generated file is dlg.exe.tmp97a2b91 (vary), and show another error:
lld-link: error: cannot open output file dlg.exe: function not supported
Error: linking with LLD failed

But, in v1.24.0, everything is OK.

this is dlg.d:

import core.sys.windows.windows;
import core.runtime;

enum { IDD_DIALOG1 = 100, }
HINSTANCE hiApp;
HWND hwDlg;

extern (Windows) nothrow @System
INT_PTR DlgProc(HWND hw, UINT wm, WPARAM wp, LPARAM lp) {
switch(wm) {
case WM_INITDIALOG:
hwDlg = hw;
return TRUE;
case WM_CLOSE:
EndDialog(hw, 0);
return TRUE;
default:
break;
}
return FALSE;
}

extern (Windows)
INT_PTR WinMain(HINSTANCE hiThis, HINSTANCE hiPrev, LPSTR psArg, int iShow) {
Runtime.initialize();
hiApp = hiThis;
INT_PTR res = DialogBox(hiApp, MAKEINTRESOURCE(IDD_DIALOG1), NULL, &DlgProc);
Runtime.terminate();
return res;
}

@top398 top398 closed this as completed Feb 23, 2021
@top398
Copy link
Author

top398 commented Feb 23, 2021

Even the simplest helloword program has the same result.

import std.stdio;
void main(string[] args) {
writeln("Hello");
}

@SimonN
Copy link

SimonN commented Mar 20, 2021

I can replicate the build failure in Wine 6.4 on Arch Linux, albeit with the different error message "path is invalid", see build log below. Thus, the lld-link failure doesn't only affect Windows 7, it also affects Wine.

The Hello World source:

import std.stdio;
void main() { writeln("hi"); }

I have installed LDC2 1.25.1 via extraction from the multilib archive. I build the Hello World with:

wine ldc2.exe -v hello.d

binary C:\ldc\bin\ldc2.exe
version 1.25.1 (DMD v2.095.1, LLVM 11.0.1)
config C:\ldc\etc\ldc2.conf (x86_64-pc-windows-msvc)
predefs LDC all D_Version2 assert D_ModuleInfo D_Exceptions D_TypeInfo X86_64
D_InlineAsm_X86_64 D_HardFloat LittleEndian D_LP64 D_PIC Windows Win64 CRuntime_
Microsoft CppRuntime_Microsoft LDC_LLVM_1100
[...]
lld-link /NOLOGO /OPT:REF /OPT:ICF /DEFAULTLIB:vcruntime140 /OUT:hello.exe hello
.obj C:/ldc/bin/../lib64\ldc_rt.builtins.lib /LIBPATH:C:/ldc/bin/../lib64 /LIBPA
TH:C:/ldc/bin/../lib64/mingw phobos2-ldc.lib druntime-ldc.lib kernel32.lib user3
2.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg3
2.lib advapi32.lib oldnames.lib legacy_stdio_definitions.lib
lld-link: error: failed to write the output file: Path is invalid.

Full build log of wine ldc2.exe -v hello.d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants