Skip to content

Windows build does not link with Advapi32.lib #1142

Closed
@vadimpiven

Description

@vadimpiven

I tried to use git2 in my build.rs script and encountered a series of errors:

liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_OpenProcessToken referenced in function current_user_sid␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_CheckTokenMembership referenced in function git_fs_path_owner_is␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_CopySid referenced in function sid_dup␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_EqualSid referenced in function git_fs_path_owner_is␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_GetLengthSid referenced in function sid_dup␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_GetTokenInformation referenced in function current_user_sid␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_IsValidSid referenced in function file_owner_sid␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_IsWellKnownSid referenced in function git_fs_path_owner_is␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-fs_path.o) : error LNK2019: unresolved external symbol __imp_GetNamedSecurityInfoW referenced in function file_owner_sid␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(43a19b30e9e69d8f-sysdir.o) : error LNK2019: unresolved external symbol __imp_RegCloseKey referenced in function lookup_registry_key␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(43a19b30e9e69d8f-sysdir.o) : error LNK2019: unresolved external symbol __imp_RegOpenKeyExW referenced in function lookup_registry_key␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(43a19b30e9e69d8f-sysdir.o) : error LNK2019: unresolved external symbol __imp_RegQueryValueExW referenced in function lookup_registry_key␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-rand.o) : error LNK2019: unresolved external symbol __imp_CryptAcquireContextA referenced in function getseed␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f5e66aefe9cd60e0-win32.o) : error LNK2001: unresolved external symbol __imp_CryptAcquireContextA␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-rand.o) : error LNK2019: unresolved external symbol __imp_CryptReleaseContext referenced in function getseed␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f5e66aefe9cd60e0-win32.o) : error LNK2001: unresolved external symbol __imp_CryptReleaseContext␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f6e81ea219c0b9f3-rand.o) : error LNK2019: unresolved external symbol __imp_CryptGenRandom referenced in function getseed␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f5e66aefe9cd60e0-win32.o) : error LNK2019: unresolved external symbol __imp_CryptGetHashParam referenced in function hash_cryptoapi_final␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f5e66aefe9cd60e0-win32.o) : error LNK2019: unresolved external symbol __imp_CryptCreateHash referenced in function hash_cryptoapi_init␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f5e66aefe9cd60e0-win32.o) : error LNK2019: unresolved external symbol __imp_CryptHashData referenced in function hash_cryptoapi_update␍
          liblibgit2_sys-13851f2c09f1f8ee.rlib(f5e66aefe9cd60e0-win32.o) : error LNK2019: unresolved external symbol __imp_CryptDestroyHash referenced in function hash_cryptoapi_init␍

Turn out libgit2 uses some WinAPI calls from Advapi32, like GetCurrentProcess in https://github.com/libgit2/libgit2/blob/21a351b0ed207d0871cb23e09c027d1ee42eae98/src/util/fs_path.c#L1832 (MSDN docs for this call https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocesstoken say that linkage with Advapi32.lib is required for the call to work).
The problem is that there is no linkage with Advapi32 in CMake scripts. Looks like Advapi32 should be added in here https://github.com/libgit2/libgit2/blob/21a351b0ed207d0871cb23e09c027d1ee42eae98/src/CMakeLists.txt#L125-L128
I created an issue for this in the libgit2 repo libgit2/libgit2#7053 Just wanted to let you know, so new release is published when someone fixes this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions