I’m trying to use the Windows GetUILanguageFallbackList
API with MinGW-w64.
Here is a very minimalistic example of calling the API:
#include <windows.h>
#include <muiload.h>
int main() {
GetUILanguageFallbackList(NULL, 0, NULL);
return 0;
}
Now, I’m not expecting that code to actually do anything useful, since I haven’t supplied a valid combination of parameters. But all I’m trying to do at this point, is get the code to compile and link. I actually have a longer example which attempts to use the API properly, but I created the above minimal version just to reproduce my linking issue. So I save that as uilang0.c
.
But when I try to compile, linking fails with the below error:
# gcc -o uilang0 uilang0.c
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:toolsmsys64tmpcclvYTlj.o:uilang0.c:(.text+0x1e): undefined reference to `GetUILanguageFallbackList'
collect2.exe: error: ld returned 1 exit status
There is a muiload.lib
with the Windows SDK, but I can’t find an equivalent for MinGW-w64, even though it does provide the muiload.h
header file. I tried linking with that; that fixed the above linker error but introduced even more linker errors:
# gcc -o uilang0 uilang0.c /c/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/minkernel/crts/crtw32/misc/nt/objfre/amd64/guard_support.obj):(.00cfg[__guard_check_icall_fptr]+0x0): undefined reference to `_guard_check_icall_nop'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/minkernel/crts/crtw32/misc/nt/objfre/amd64/guard_support.obj):(.00cfg[__guard_xfg_check_icall_fptr]+0x0): undefined reference to `_guard_check_icall_nop'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/onecore/base/mui/muiload/lib/objfre/amd64/getuilanguagefallbacklist.obj):(.text$mn+0xe): undefined reference to `__security_cookie'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/onecore/base/mui/muiload/lib/objfre/amd64/getuilanguagefallbacklist.obj):(.text$mn+0x92): undefined reference to `__security_check_cookie'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/onecore/base/mui/muiload/lib/objfre/amd64/getuilanguagefallbacklist.obj):(.text$mn+0x13): undefined reference to `__security_cookie'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/onecore/base/mui/muiload/lib/objfre/amd64/getuilanguagefallbacklist.obj):(.text$mn+0xfb): undefined reference to `__security_check_cookie'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/onecore/base/mui/muiload/lib/objfre/amd64/getuilanguagefallbacklist.obj):(.xdata[$unwind$?PreVistaFallback@@YAHKPEAKPEAG0@Z]+0x14): undefined reference to `__GSHandlerCheck'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/onecore/base/mui/muiload/lib/objfre/amd64/getuilanguagefallbacklist.obj):(.xdata[$unwind$?MultiStr_AddLangAndParentNames@@YAHPEAG_KG@Z]+0x10): undefined reference to `__GSHandlerCheck'
C:/tools/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/x64/muiload.lib(d:/os/obj/amd64fre/onecore/base/mui/muiload/lib/objfre/amd64/multistr.obj):(.text$mn+0x7f): undefined reference to `StringCchCopyW'
collect2.exe: error: ld returned 1 exit status
I tried adding a bunch more Platform SDK .lib
files, but no matter what combination I use, I still get undefined references. Adding BufferOverflowU.lib
gets rid of the undefined reference to __security_cookie
/__security_check_cookie
. Adding ntdllp.lib
gets rid of the undefined reference to __GSHandlerCheck
. But I can’t seem to get rid of the _guard_check_icall_nop
or StringCchCopyW
undefined references. Also, I can’t help but worry that randomly adding libraries without knowing what I’m doing, even if I eventually get it to link, it might not work due to some incompatible combination.
5