Open glandium opened 4 years ago
This should work with beta and nightly when you have external MinGW installed and added to PATH
.
@mati865 Can you clarify what is supposed to work? Direcctly out-of-the-box, or adding -lssp
to RUSTFLAGS
? I am trying to cross-compile to target x86_64-pc-windows-gnu from host x86_64-unknown-linux-gnu, and getting the same error:
= note: "x86_64-w64-mingw32-gcc" "-fno-use-linker-plugin" "-Wl,--nxcompat" "-m64" "-nostartfiles" "/usr/x86_64-w64-mingw32/lib/dllcrt2.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib/rsbegin.o" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib/self-contained" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.0.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.1.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.10.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.11.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.12.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.13.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.14.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.15.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.2.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.3.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.4.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.5.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.6.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.7.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.8.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.9.rcgu.o" "-o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.dll" "-Wl,--version-script=/tmp/rustcZTXjqb/list" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.gy76lupzofoxc6f.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.14pxj9r50qad4vso.rcgu.o" "-shared" "-Wl,--out-implib,$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/libstd-f849842eec509894.dll.a" "-nodefaultlibs" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/release/deps" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/build/backtrace-sys-73393a103395095f/out" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib" "-ladvapi32" "-lws2_32" "-luserenv" "-Wl,-Bstatic" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/libpanic_unwind-9c93af3a21bf779f.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/libhashbrown-951231d947810b4e.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/librustc_std_workspace_alloc-4397ecfaeb9d832e.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/libbacktrace-4ceb221c1451fd72.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/librustc_demangle-176970e988fbc465.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/libunwind-204b2abdb5f7ae9a.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/libcfg_if-b787a80b1cca0552.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/liblibc-3072b25f7851b3d1.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/liballoc-62d18a8976d7c133.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/librustc_std_workspace_core-1b8ab73855770e4f.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcZTXjqb/libcore-bae6c7eaa8cff910.rlib" "-Wl,--no-whole-archive" "/tmp/rustcZTXjqb/libcompiler_builtins-fa2917f0b54acfc4.rlib" "-Wl,-Bdynamic" "-lmsvcrt" "-lmingwex" "-lmingw32" "-lmsvcrt" "-luser32" "-lkernel32" "-lgcc_s" "-lgcc" "-lkernel32" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib/rsend.o"
= note: /usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(dwarf.o): in function `snprintf':
/usr/share/mingw-w64/include/stdio.h:893: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(dwarf.o): in function `read_uleb128':
./vendor/backtrace-sys/src/libbacktrace/dwarf.c:987: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(dwarf.o): in function `read_sleb128':
./vendor/backtrace-sys/src/libbacktrace/dwarf.c:1025: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(dwarf.o): in function `read_uint16':
./vendor/backtrace-sys/src/libbacktrace/dwarf.c:842: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(dwarf.o): in function `read_uint24':
./vendor/backtrace-sys/src/libbacktrace/dwarf.c:859: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(dwarf.o):./vendor/backtrace-sys/src/libbacktrace/dwarf.c:876: more undefined references to `__stack_chk_fail' follow
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(dwarf.o):dwarf.c:(.rdata$.refptr.__stack_chk_guard[.refptr.__stack_chk_guard]+0x0): undefined reference to `__stack_chk_guard'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(fileline.o): in function `snprintf':
/usr/share/mingw-w64/include/stdio.h:893: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(fileline.o): in function `__rdos_backtrace_pcinfo':
./vendor/backtrace-sys/src/libbacktrace/fileline.c:266: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(fileline.o): in function `__rdos_backtrace_syminfo':
./vendor/backtrace-sys/src/libbacktrace/fileline.c:283: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(state.o): in function `__rdos_backtrace_create_state':
./vendor/backtrace-sys/src/libbacktrace/state.c:72: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(pecoff.o): in function `coff_add':
./vendor/backtrace-sys/src/libbacktrace/pecoff.c:876: undefined reference to `__stack_chk_fail'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/rustcZTXjqb/libbacktrace_sys-5ac9ad0bd2943e4c.rlib(pecoff.o):./vendor/backtrace-sys/src/libbacktrace/pecoff.c:929: more undefined references to `__stack_chk_fail' follow
collect2: error: ld returned 1 exit status
Adding -lssp_nonshared -lssp
into rustbuild's builder.rs
as a patch gives me the following error:
= note: "x86_64-w64-mingw32-gcc" "-fno-use-linker-plugin" "-Wl,--nxcompat" "-m64" "-nostartfiles" "/usr/x86_64-w64-mingw32/lib/dllcrt2.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib/rsbegin.o" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib/self-contained" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.0.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.1.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.10.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.11.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.12.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.13.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.14.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.15.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.2.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.3.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.4.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.5.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.6.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.7.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.8.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.std.7wsrxuxn-cgu.9.rcgu.o" "-o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.dll" "-Wl,--version-script=/tmp/rustcQ8fEFU/list" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.gy76lupzofoxc6f.rcgu.o" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/std-f849842eec509894.14pxj9r50qad4vso.rcgu.o" "-shared" "-Wl,--out-implib,$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps/libstd-f849842eec509894.dll.a" "-nodefaultlibs" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/deps" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/release/deps" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2-std/x86_64-pc-windows-gnu/release/build/backtrace-sys-73393a103395095f/out" "-L" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib" "-ladvapi32" "-lws2_32" "-luserenv" "-Wl,-Bstatic" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/libpanic_unwind-9c93af3a21bf779f.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/libhashbrown-951231d947810b4e.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/librustc_std_workspace_alloc-4397ecfaeb9d832e.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/libbacktrace-4ceb221c1451fd72.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/libbacktrace_sys-5ac9ad0bd2943e4c.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/librustc_demangle-176970e988fbc465.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/libunwind-204b2abdb5f7ae9a.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/libcfg_if-b787a80b1cca0552.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/liblibc-3072b25f7851b3d1.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/liballoc-62d18a8976d7c133.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/librustc_std_workspace_core-1b8ab73855770e4f.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcQ8fEFU/libcore-bae6c7eaa8cff910.rlib" "-Wl,--no-whole-archive" "/tmp/rustcQ8fEFU/libcompiler_builtins-fa2917f0b54acfc4.rlib" "-lssp_nonshared" "-lssp" "-Wl,-Bdynamic" "-lmsvcrt" "-lmingwex" "-lmingw32" "-lmsvcrt" "-luser32" "-lkernel32" "-lgcc_s" "-lgcc" "-lkernel32" "$PWD/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-pc-windows-gnu/lib/rsend.o"
= note: /usr/bin/x86_64-w64-mingw32-ld: /usr/lib/gcc/x86_64-w64-mingw32/10-win32/libssp.a(ssp.o):(.text.startup+0x36): undefined reference to `__imp_CryptAcquireContextA'
/usr/bin/x86_64-w64-mingw32-ld: /usr/lib/gcc/x86_64-w64-mingw32/10-win32/libssp.a(ssp.o):(.text.startup+0x63): undefined reference to `__imp_CryptGenRandom'
/usr/bin/x86_64-w64-mingw32-ld: /usr/lib/gcc/x86_64-w64-mingw32/10-win32/libssp.a(ssp.o):(.text.startup+0x7e): undefined reference to `__imp_CryptReleaseContext'
/usr/bin/x86_64-w64-mingw32-ld: /usr/lib/gcc/x86_64-w64-mingw32/10-win32/libssp.a(ssp.o):(.text.startup+0x86): undefined reference to `__imp_CryptReleaseContext'
collect2: error: ld returned 1 exit status
I am using gcc-mingw-w64-x86-64-win32 with the win32 threading model, and CFLAGS
and CXXFLAGS
both contain -fstack-protector-strong
.
$ x86_64-w64-mingw32-gcc --version
x86_64-w64-mingw32-gcc (GCC) 10-win32 20200525
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
It seems that adding -lssp
to windows_gnu_base.rs
in late_link_args
works. This results in it being passed after -Wl,-Bdynamic
which is what is needed. Adding -lssp
simply to RUSTFLAGS
puts it before any -Wl,-Bdynamic
that rust adds, and I suppose we don't want to stick -Wl,-Bdynamic
in RUSTFLAGS
because it will affect both static and dynamic builds, and we can't switch it back afterwards.
Now -lssp
is only needed if stack-protector is enabled. I'm not sure how to auto-detect this from windows_gnu_base.rs
; for now I'm just hard-patching it into the Debian rustc.
To be clear, Debian enables stack protector via CFLAGS. This is picked up by the cc
crate, when it compiles backtrace-sys
etc, which makes its way into std
thereby causing this failure.
@infinity0 I think RUSTFLAGS=-Clink-arg=-lssp_nonshared -Clink-arg=-lssp
should work just fine.
This issue is about missing libssp from rust-mingw
component which affects only Windows hosts.
@mati865 it doesn't work for me. I am using Debian gcc-mingw not "rust-mingw".
To follow up, Debian's gcc-mingw does provide libssp, yet my build still fails with the RUSTFLAGS
described. So I think merely having rust-mingw provide libssp would not be sufficient to get things working - you will probably run into what I described, and we'll have to patch windows_gnu_base.rs
. Unless you (or someone else) has actually tried it?
This is what I'm doing:
--- a/src/librustc_target/spec/windows_gnu_base.rs
+++ b/src/librustc_target/spec/windows_gnu_base.rs
@@ -35,6 +35,8 @@
"-lmsvcrt".to_string(),
"-luser32".to_string(),
"-lkernel32".to_string(),
+ "-lssp_nonshared".to_string(),
+ "-lssp".to_string(),
],
);
late_link_args_dynamic.insert(
In particular, adding -fstack-protector-strong
here but omitting the -l
s seems not to work.
Feasibly, we could set this only if either CFLAGS or CXXFLAGS contains "stack-protector", and omit it otherwise. The cc
crate checks these envvars so I don't think it's that bad here either.
After doing this, I can successfully cross-compile a simple hello-world program from gnu/linux to windows, then run it via wine.
$ WINEPATH="/usr/lib/gcc/x86_64-w64-mingw32/10-win32;/usr/lib/rustlib/x86_64-pc-windows-gnu/lib" wine ./test.exe
hello, world!
@infinity0 I have not tried -fstack-protector
with Rust but it appears to require advapi32
library so this should work: RUSTFLAGS="-Clink-arg=-lssp_nonshared -Clink-arg=-lssp -ladvapi32"
. I have no idea how late_link_args_dynamic
pulled that library when you added libssp
libs to late_link_args
.
rust-mingw
component is only available for windows-gnu
host so it doesn't matter for cross compiling from Linux.
@mati865 Ah, it might just be the difference between linking against static vs dynamic libraries. The main difference between RUSTFLAGS
and late_link_args
is that RUSTFLAGS
comes earlier in the eventual CLI invocation to *-ld
. In particular it seems late_link_args
comes after a -Bdynamic
flag. So then only the direct dependencies have to be linked, rather than all the transitive dependencies which would include -ladvapi32
assuming you are correct. (I am guessing this explanation based on what I've seen so far, including the *-ld
invocation, but didn't investigate deeper for 100% confirmation.) My patch works for my use-case for now anyway, it even builds cargo.exe fine and I can run it through WINE.
The GCC compiler that comes with rust-mingw understands
-fstack-protector-strong
and emits stack-protector code, but the build further fails to link with messages like:The missing symbol is normally added by
gcc
to theld
command line via-lssp_nonshared -lssp
, when it's passed-fstack-protector-strong
during linking. Adding-fstack-protector-strong
viaRUSTFLAGS=-Clink-arg=-fstack-protector-strong
doesn't actually work because of-nostdlib
that rust adds on its own, butRUSTFLAGS=-Clink-arg=-lssp_nonshared -Clink-arg=-lssp
doesn't work either because libssp* is not provided by rust-mingw.