Skip to content

Cannot override Windows runtime for rust tests #116900

Description

@xclaesse

Related to #39016.

Meson has an option to select different vscrt, but rustc always uses msvcrt.lib. To work around that issue, Meson adds -l static=msvcrtd.lib when we need use debug crt. This seems to work fine, unless a rust test program is built with rustc --test. In that case I get that linker issue:

[2/6] "rustc" "-C" "linker=link" "--color=always" "-C" "debug-assertions=yes" "-C" "overflow-checks=no" "--crate-type" "bin" "-C" "link-arg=/release" "-C" "link-arg=/nologo" "-g" "--crate-name" "rust_test_from_static" "--emit" "dep-info=rust_test_from_static.d" "--emit" "link=rust_test_from_static.exe" "--out-dir" "rust_test_from_static.exe.p" "--test" "-l" "static=msvcrtd" "../test cases/rust/9 unit tests/test.rs"
FAILED: rust_test_from_static.exe 
"rustc" "-C" "linker=link" "--color=always" "-C" "debug-assertions=yes" "-C" "overflow-checks=no" "--crate-type" "bin" "-C" "link-arg=/release" "-C" "link-arg=/nologo" "-g" "--crate-name" "rust_test_from_static" "--emit" "dep-info=rust_test_from_static.d" "--emit" "link=rust_test_from_static.exe" "--out-dir" "rust_test_from_static.exe.p" "--test" "-l" "static=msvcrtd" "../test cases/rust/9 unit tests/test.rs"
error: linking with `link` failed: exit code: 1120
  |
  = note: "link" "/NOLOGO" "C:\\Users\\VSSADM~1\\AppData\\Local\\Temp\\rustc6j3F90\\symbols.o" "rust_test_from_static.exe.p\\rust_test_from_static.rust_test_from_static.3a99c7044bb59086-cgu.0.rcgu.o" "rust_test_from_static.exe.p\\rust_test_from_static.56vms91uq00rjhzp.rcgu.o" "/LIBPATH:C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "/WHOLEARCHIVE:msvcrtd.lib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libtest-a2072d90d499fe6f.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libgetopts-0d6237423cc36bee.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunicode_width-4f110db62cbab4e9.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_std-8292a214a8faae0b.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-6d80dd4621b609ca.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-28e98873675f19a9.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-4de870115f3f458f.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd_detect-ffc9fccfd2140b69.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libhashbrown-8a83799ae3c10d1a.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-fe19ee773224879a.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libminiz_oxide-654d17813ba7bea6.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libadler-f8fe6b4f80df7ee8.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-33080a7794fe111b.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcfg_if-927908925e399197.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liblibc-bb1b1a6951ff0244.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-e2d4eb855c49fe9e.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-1dfd0cc5ad1fd4f1.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-09e8922577df7322.rlib" "C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-d1b73685f2fdc914.rlib" "kernel32.lib" "kernel32.lib" "advapi32.lib" "bcrypt.lib" "kernel32.lib" "ntdll.lib" "userenv.lib" "ws2_32.lib" "kernel32.lib" "ws2_32.lib" "kernel32.lib" "msvcrt.lib" "/NXCOMPAT" "/LIBPATH:C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "/OUT:rust_test_from_static.exe" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\VssAdministrator\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis" "/release" "/nologo"
  = note: LINK : warning LNK4031: no subsystem specified; CONSOLE assumed
          LINK : warning LNK4067: ambiguous entry point; selected 'mainCRTStartup'
          LINK : warning LNK4286: symbol '_HUGE' defined in 'msvcrtd.lib(huge.obj)' is imported by 'msvcrtd.lib(HUGE.obj)'
          msvcrtd.lib(_argc.obj) : error LNK2001: unresolved external symbol __imp___argc
          msvcrtd.lib(_argc.obj) : error LNK2001: unresolved external symbol __argc_dll
          msvcrtd.lib(_argv.obj) : error LNK2001: unresolved external symbol __imp___argv
          msvcrtd.lib(_argv.obj) : error LNK2001: unresolved external symbol __argv_dll
          msvcrtd.lib(commode.obj) : error LNK2001: unresolved external symbol __imp__commode
          msvcrtd.lib(commode.obj) : error LNK2001: unresolved external symbol _commode_dll
          msvcrtd.lib(daylight.obj) : error LNK2001: unresolved external symbol __imp__daylight
          msvcrtd.lib(daylight.obj) : error LNK2001: unresolved external symbol _daylight_dll
          msvcrtd.lib(environ.obj) : error LNK2001: unresolved external symbol __imp__environ
          msvcrtd.lib(environ.obj) : error LNK2001: unresolved external symbol _environ_dll
          msvcrtd.lib(fmode.obj) : error LNK2001: unresolved external symbol __imp__fmode
          msvcrtd.lib(fmode.obj) : error LNK2001: unresolved external symbol _fmode_dll
          msvcrtd.lib(environ.obj) : error LNK2001: unresolved external symbol _environ_dll
          msvcrtd.lib(fmode.obj) : error LNK2001: unresolved external symbol __imp__fmode
          msvcrtd.lib(fmode.obj) : error LNK2001: unresolved external symbol _fmode_dll
          msvcrtd.lib(HUGE.obj) : error LNK2001: unresolved external symbol _HUGE_dll
          msvcrtd.lib(osver.obj) : error LNK2001: unresolved external symbol __imp__osver
          msvcrtd.lib(osver.obj) : error LNK2001: unresolved external symbol _osver_dll
          msvcrtd.lib(pctype.obj) : error LNK2001: unresolved external symbol __imp__pctype
          msvcrtd.lib(pctype.obj) : error LNK2001: unresolved external symbol _pctype_dll
          msvcrtd.lib(pwctype.obj) : error LNK2001: unresolved external symbol __imp__pwctype
          msvcrtd.lib(pwctype.obj) : error LNK2001: unresolved external symbol _pwctype_dll
          msvcrtd.lib(pgmptr.obj) : error LNK2001: unresolved external symbol __imp__pgmptr
          msvcrtd.lib(pgmptr.obj) : error LNK2001: unresolved external symbol _pgmptr_dll
          msvcrtd.lib(sys_nerr.obj) : error LNK2001: unresolved external symbol __imp__sys_nerr
          msvcrtd.lib(sys_nerr.obj) : error LNK2001: unresolved external symbol _sys_nerr_dll
          msvcrtd.lib(timezone.obj) : error LNK2001: unresolved external symbol __imp__timezone
          msvcrtd.lib(timezone.obj) : error LNK2001: unresolved external symbol _timezone_dll
          msvcrtd.lib(winver.obj) : error LNK2001: unresolved external symbol __imp__winver
          msvcrtd.lib(winver.obj) : error LNK2001: unresolved external symbol _winver_dll
          msvcrtd.lib(winmajor.obj) : error LNK2001: unresolved external symbol __imp__winmajor
          msvcrtd.lib(winmajor.obj) : error LNK2001: unresolved external symbol _winmajor_dll
          msvcrtd.lib(winminor.obj) : error LNK2001: unresolved external symbol __imp__winminor
          msvcrtd.lib(winminor.obj) : error LNK2001: unresolved external symbol _winminor_dll
          msvcrtd.lib(ctype.obj) : error LNK2001: unresolved external symbol __imp__ctype
          msvcrtd.lib(ctype.obj) : error LNK2001: unresolved external symbol _ctype
          msvcrtd.lib(tzname.obj) : error LNK2001: unresolved external symbol __imp__tzname
          msvcrtd.lib(tzname.obj) : error LNK2001: unresolved external symbol _tzname
          msvcrtd.lib(mbcurmax.obj) : error LNK2001: unresolved external symbol __imp___mb_cur_max
          msvcrtd.lib(mbcurmax.obj) : error LNK2001: unresolved external symbol __mb_cur_max_dll
          msvcrtd.lib(syserlst.obj) : error LNK2001: unresolved external symbol __imp__sys_errlist
          msvcrtd.lib(syserlst.obj) : error LNK2001: unresolved external symbol _sys_errlist

Any idea what causes that? Any workaround possible?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions