Skip to content

Version 0.5.0: Cargo Tries to link to SspiCli.dll instead of Secur32.dll when using GetUserNameExA() #627

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
vegardw opened this issue Mar 21, 2021 · 3 comments · Fixed by #640

Comments

@vegardw
Copy link

vegardw commented Mar 21, 2021

When trying to use GetUserNameExA(), cargo build tries to link to SspiCli.dl using non-existing file SspiCli.lib instead of Secur32.dll using Secur32.lib, and build fails. I have the Windows 10 SDK installed and Secur32.lib is included in the SDK, so linking with that would succeed.

Steps to reproduce

Create a new project with the following:

Cargo.toml

[package]
name = "seclib"
version = "0.1.0"
edition = "2018"

[dependencies]
windows = "0.5.0"

[build-dependencies]
windows = "0.5.0"

build.rs

fn main() {
    windows::build!(
        windows::win32::windows_programming::GetUserNameExA
    );
  }
  

src\main.rs

#![allow(dead_code)]
#![allow(unused_imports)]

mod bindings {
    ::windows::include_bindings!();
}


use bindings::windows::win32::windows_programming::GetUserNameExA;

fn main() {
    println!("Hello, world!");
}

Expected results

project is linked with secur32.dll library and is linked successfully when executing cargo build

Actual results

cargo build tries to link to SspiCli.dl using non-existing file SspiCli.lib, and build fails

PS C:\Users\vegard\source\repos\seclib> cargo build
   Compiling seclib v0.1.0 (C:\Users\vegard\source\repos\seclib)
error: linking with `link.exe` failed: exit code: 1181
  |
  = note: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.28.29910\\bin\\HostX64\\x64\\link.exe" "/NOLOGO" 
"/NXCOMPAT" "/LIBPATH:C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.1hpx7l8yy80fv79s.rcgu.o" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.1w4z1sgbrtqnze7z.rcgu.o" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.2fs4c3n89fhjdvfv.rcgu.o" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.2qslwrgqz64qcgqv.rcgu.o" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.3reqzfqie3wgb0fq.rcgu.o" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.411tlv2x1c6j2qno.rcgu.o" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.k435cl9zshn99or.rcgu.o" "/OUT:C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.exe" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\seclib.14z1cf9we081h8dx.rcgu.o" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\intrinsic.natvis" "/NATVIS:C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\liballoc.natvis" "/NATVIS:C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libcore.natvis" "/NATVIS:C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\etc\\libstd.natvis" "/LIBPATH:C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps" "/LIBPATH:C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib" "SspiCli.lib" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\libwindows-8bd0580c6cfa550c.rlib" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\libconst_sha1-b23143bff14a823b.rlib" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\libwindows_gen-07bcc77ef0066c8f.rlib" "C:\\Users\\vegard\\source\\repos\\seclib\\target\\debug\\deps\\libsquote-7f66eb9f64fa600d.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libstd-0087fff1d6c84113.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libpanic_unwind-e9a9adcb7b282f86.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_demangle-c17bc77d789f8359.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libhashbrown-1f739c53c46039b3.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_alloc-b12f9afb50af9e82.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libunwind-4813d8391ae0f1e1.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcfg_if-a6dfd598b03abbd4.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liblibc-8e04de9ca6363561.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\liballoc-05126e82a7fe403c.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\librustc_std_workspace_core-7f3e1ef8417012fa.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcore-df80c014103f27c5.rlib" "C:\\Users\\vegard\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\\lib\\rustlib\\x86_64-pc-windows-msvc\\lib\\libcompiler_builtins-f404d34c325d6d79.rlib" "OLEAUT32.lib" "OLEAUT32.lib" "OLEAUT32.lib" "OLEAUT32.lib" "OLEAUT32.lib" "OLE32.lib" "OLE32.lib" "OLE32.lib" "OLE32.lib" "OLE32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "KERNEL32.lib" "advapi32.lib" "ws2_32.lib" "userenv.lib" "msvcrt.lib"
  = note: LINK : fatal error LNK1181: cannot open input file 'SspiCli.lib'


error: aborting due to previous error

error: could not compile `seclib`

To learn more, run the command again with --verbose.
@vegardw
Copy link
Author

vegardw commented Mar 21, 2021

Workaround, inspired by workaround in #465 / #467

diff --git a/crates/gen/src/types/function.rs b/crates/gen/src/types/function.rs
index 9705ce2..82d4db9 100644
--- a/crates/gen/src/types/function.rs
+++ b/crates/gen/src/types/function.rs
@@ -49,6 +49,9 @@ impl Function {
         if link.contains("-ms-win-") || link == "D3DCOMPILER_47" {
             link = "onecoreuap";
         }
+        if link == "SspiCli" {
+            link = "secur32";
+        }

         if cfg!(windows) {
             quote! {

@kennykerr
Copy link
Collaborator

Duplicate of #463

@kennykerr
Copy link
Collaborator

I have applied a workaround for this.

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

Successfully merging a pull request may close this issue.

2 participants