[cfe-users] Adding linker flag `-save-temps` resolves the clang-8 error: "unable to make temporary file"

Danijel DOMAZET via cfe-users cfe-users at lists.llvm.org
Mon Oct 5 06:46:18 PDT 2020


Hi David, Hi Fang-rui,

Just to remind, when I add -save-temps flag, linking works, but without
this option it fails with:

clang-8: error: unable to make temporary file: No such file or directory
clang-8: error: unable to make temporary file: No such file or directory
clang-8: error: unable to make temporary file: No such file or directory

Here is the output with flags -save-temps, -###:

 "/usr/bin/clang-8" "-cc1" "-triple" "x86_64-unknown-windows-cygnus" "-S"
"-save-temps=cwd" "-disable-free" "-disable-llvm-verifier"
"-discard-value-names" "-main-file-name" "my_files\\my_file1.bc"
"-mrelocation-model" "pic" "-pic-level" "2" "-mthread-model" "posix"
"-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-munwind-tables"
"-target-cpu" "x86-64" "-dwarf-column-info" "-debugger-tuning=gdb"
"-momit-leaf-frame-pointer" "-v" "-resource-dir" "/usr/lib/clang/8.0.1"
"-fdebug-compilation-dir" "/cygdrive/c/my_projects/prj1/Debug"
"-ferror-limit" "19" "-fmessage-length" "0" "-fobjc-runtime=gcc"
"-fseh-exceptions" "-fdiagnostics-show-option" "-o" "my_files\\my_file1.s"
"-x" "ir" "my_files\\my_file1.bc" "-faddrsig"

Here is the output without -save-temps, just -###:

 "/usr/bin/clang-8" "-cc1" "-triple" "x86_64-unknown-windows-cygnus"
"-emit-obj" "-mrelax-all" "-disable-free" "-disable-llvm-verifier"
"-discard-value-names" "-main-file-name" "my_files\\my_file1.bc"
"-mrelocation-model" "pic" "-pic-level" "2" "-mthread-model" "posix"
"-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-munwind-tables"
"-target-cpu" "x86-64" "-dwarf-column-info" "-debugger-tuning=gdb"
"-momit-leaf-frame-pointer" "-v" "-resource-dir" "/usr/lib/clang/8.0.1"
"-fdebug-compilation-dir" "/cygdrive/c/my_projects/prj1/Debug"
"-ferror-limit" "19" "-fmessage-length" "0" "-fobjc-runtime=gcc"
"-fseh-exceptions" "-fdiagnostics-show-option" "-o" "" "-x" "ir"
"my_files\\my_file1.bc" "-faddrsig"

So the "-o" "my_files\\my_file1.s"  vs  "-o" "" seems to be the difference.
Is there an explanation?

Also, some more output with the output with flags -save-temps, -###:

"/usr/bin/ld" "-m" "i386pep" "--wrap" "_Znwm" "--wrap" "_Znam" "--wrap"
"_ZnwmRKSt9nothrow_t" "--wrap" "_ZnamRKSt9nothrow_t" "--wrap" "_ZdlPv"
"--wrap" "_ZdaPv" "--wrap" "_ZdlPvRKSt9nothrow_t" "--wrap"
"_ZdaPvKSt9nothrow_t" "-Bdynamic" "--tsaware" "-o" "myexecutable"
"/usr/lib/crt0.o" "/usr/lib/gcc/x86_64-pc-cygwin/10/crtbegin.o"
"-LC:/mylibraries" "-L/usr/lib/gcc/x86_64-pc-cygwin/10"
"-L/usr/x86_64-pc-cygwin/lib" "-L/usr/lib" "-L/usr/lib/w32api"
"my_files\\my_file1.o" "my_files\\my_file2.o" " my_files\\my_file3.o"
"-lnaturedsp" "-lgcc_s" "-gcc" "-lcygwin" "-ladvapi32" "-lshell32"
"-luser32" "-lkernel32" "/usr/lib/default-manifest.o"
"/usr/lib/gcc/x86_64-pc-cygwin/10/crtend.o"

and with only -###:

 "/usr/bin/ld" "-m" "i386pep" "--wrap" "_Znwm" "--wrap" "_Znam" "--wrap"
"_ZnwmRKSt9nothrow_t" "--wrap" "_ZnamRKSt9nothrow_t" "--wrap" "_ZdlPv"
"--wrap" "_ZdaPv" "--wrap" "_ZdlPvRKSt9nothrow_t" "--wrap"
"_ZdaPvKSt9nothrow_t" "-Bdynamic" "--tsaware" "-o" "myexecutable"
"/usr/lib/crt0.o" "/usr/lib/gcc/x86_64-pc-cygwin/10/crtbegin.o"
"-LC:/mylibraries" "-L/usr/lib/gcc/x86_64-pc-cygwin/10"
"-L/usr/x86_64-pc-cygwin/lib" "-L/usr/lib" "-L/usr/lib/w32api" "" "" ""
"-lnaturedsp" "-lgcc_s" "-lgcc" "-lcygwin" "-ladvapi32" "-lshell32"
"-luser32" "-lkernel32" "/usr/lib/default-manifest.o"
"/usr/lib/gcc/x86_64-pc-cygwin/10/crtend.o"

So, again  "my_files\\my_file1.o" "my_files\\my_file2.o" "
my_files\\my_file3.o" is lost and substituted with empty strings  "" "" "".


Does this info help resolve my problem?
Danijel


On Thu, Aug 13, 2020 at 8:27 PM David Blaikie <dblaikie at gmail.com> wrote:

> Oh, sorry, I didn't read the question in detail about how -save-temps
> was making things work when they otherwise were not.
>
> If you run clang with -### it'll show the command lines it's using,
> which should show you where it's trying to write the files so you can
> change that/make them writable. I'm not sure which variable is used to
> influence clang's temporary directory choice, though.
>
> On Thu, Aug 13, 2020 at 11:22 AM Danijel DOMAZET
> <p-danijel.domazet at devialet.com> wrote:
> >
> > Thanks Fang-rui.
> > I still haven't been able to fix the issue, I still use --save-temps,
> and that makes linking very slow.
> > Why does this error go away when I set --save-temps, any idea??
> >
> >
> >
> > On Thu, Aug 13, 2020 at 7:16 PM Fāng-ruì Sòng <maskray at google.com>
> wrote:
> >>
> >> On Thu, Aug 13, 2020 at 8:59 AM David Blaikie <dblaikie at gmail.com>
> wrote:
> >> >
> >> > On Thu, Aug 13, 2020 at 2:59 AM Danijel DOMAZET
> >> > <p-danijel.domazet at devialet.com> wrote:
> >> > >
> >> > > Thanks David.
> >> > > Why do you think this could be about current dir?
> >> > > Isn't it about TMP (or TEMP or TMPDIR) environment variables?
> >>
> >> Neither the driver option -save-temps nor the linker option
> >> --save-temps (driver option -Wl,--save-temps) respects
> >> TMP/TEMP/TMPDIR.
> >> The temporary files are saved relative to the current working
> >> directory, which can be changed via -working-directory=
> >>
> >> > Because I ran it locally, and observed that that's where the files
> >> > were written to.
> >> >
> >> > >
> >> > > Thanks,
> >> > > Danijel Domazet
> >> > >
> >> > >
> >> > > On Thu, Aug 13, 2020 at 12:11 AM David Blaikie <dblaikie at gmail.com>
> wrote:
> >> > >>
> >> > >> Looks like it writes the files to the current directory - do you
> have
> >> > >> permission to access the current directory?
> >> > >>
> >> > >> On Wed, Aug 12, 2020 at 6:28 AM Danijel DOMAZET via cfe-users
> >> > >> <cfe-users at lists.llvm.org> wrote:
> >> > >> >
> >> > >> > Hi clang users,
> >> > >> > I am using Windows10 + Cygwin + Eclipse +  LLVM toolchain to
> build a C/C++
> >> > >> > project.
> >> > >> >
> >> > >> > The files compile fine, but linking with `clang++` fails with
> multiple
> >> > >> > `error: unable to make temporary file: No such file or
> directory`.
> >> > >> >
> >> > >> >     clang++ -o test "source1.bc" "source2.bc" "source3.bc"
> >> > >> >     clang-8: error: unable to make temporary file: No such file
> or directory
> >> > >> >     clang-8: error: unable to make temporary file: No such file
> or directory
> >> > >> >     clang-8: error: unable to make temporary file: No such file
> or directory
> >> > >> >
> >> > >> > Linker generates one error per each object file.
> >> > >> >
> >> > >> > However, when I add the `-save-temps` option to linker, it works
> OK.
> >> > >> >
> >> > >> > I am launching Eclipse.exe from within Cygwin. I have tried to
> set TMP,
> >> > >> > TEMP to /temp, /temp/, /cygdrive/c/temp, etc, but nothing worked.
> >> > >> >
> >> > >> > What could be the problem?
> >> > >> >
> >> > >> > Thanks,
> >> > >> > Danijel Domazet
> >> > >> >
> >> > >> >
> >> > >> >
> >> > >> > - Confidential -
> >> > >> > _______________________________________________
> >> > >> > cfe-users mailing list
> >> > >> > cfe-users at lists.llvm.org
> >> > >> > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
> >> > >
> >> > >
> >> > > - Confidential -
> >>
> >>
> >>
> >> --
> >> 宋方睿
> >
> >
> > - Confidential -
>

-- 
- Confidential -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20201005/96058a41/attachment.html>


More information about the cfe-users mailing list