https://bugs.winehq.org/show_bug.cgi?id=52338
Bug ID: 52338 Summary: Cygwin compilation fails: undefined reference to `_imp____acrt_iob_func' in winecrt0/debug.c Product: Wine Version: 7.0-rc4 Hardware: x86-64 OS: Windows Status: UNCONFIRMED Severity: blocker Priority: P2 Component: build-env Assignee: wine-bugs@winehq.org Reporter: saulius2@gmail.com
(This is continuation from the bug 52328)
--- snip --- tools/winegcc/winegcc.exe -o dlls/dxgi/dxgi.dll --wine-objdir . -Wl,--disable-stdcall-fixup \ -fasynchronous-unwind-tables -shared dlls/dxgi/dxgi.spec -mcygwin dlls/dxgi/adapter.o \ dlls/dxgi/device.o dlls/dxgi/dxgi_main.o dlls/dxgi/factory.o dlls/dxgi/output.o \ dlls/dxgi/surface.o dlls/dxgi/swapchain.o dlls/dxgi/utils.o dlls/dxgi/version.res \ dlls/gdi32/libgdi32.a libs/dxguid/libdxguid.a libs/uuid/libuuid.a dlls/wined3d/libwined3d.a \ dlls/user32/libuser32.a dlls/win32u/libwin32u.a dlls/winecrt0/libwinecrt0.a \ dlls/kernel32/libkernel32.a dlls/ntdll/libntdll.a /usr/lib/gcc/i686-pc-cygwin/11/../../../../i686-pc-cygwin/bin/ld: dlls/winecrt0/libwinecrt0.a(debug.o): in function `fallback__wine_dbg_output': /home/saukrs/src/wine/dlls/winecrt0/debug.c:178: undefined reference to `_imp____acrt_iob_func' /usr/lib/gcc/i686-pc-cygwin/11/../../../../i686-pc-cygwin/bin/ld: dlls/winecrt0/libwinecrt0.a(debug.o): in function `fallback__wine_dbg_header': /home/saukrs/src/wine/dlls/winecrt0/debug.c:203: undefined reference to `_imp____acrt_iob_func' collect2: error: ld returned 1 exit status winegcc: /usr/bin/gcc.exe failed make: *** [Makefile:57380: dlls/dxgi/dxgi.dll] Error 2 --- snip ---
https://bugs.winehq.org/show_bug.cgi?id=52338
Saulius K. saulius2@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Priority|P2 |P4
--- Comment #1 from Saulius K. saulius2@gmail.com --- If I add -lmsvcrt, the library gets built:
--- snip --- $ tools/winegcc/winegcc.exe -o dlls/dxgi/dxgi.dll --wine-objdir . -Wl,--disable-stdcall-fixup \ -fasynchronous-unwind-tables -shared dlls/dxgi/dxgi.spec -mcygwin dlls/dxgi/adapter.o \ dlls/dxgi/device.o dlls/dxgi/dxgi_main.o dlls/dxgi/factory.o dlls/dxgi/output.o \ dlls/dxgi/surface.o dlls/dxgi/swapchain.o dlls/dxgi/utils.o dlls/dxgi/version.res \ dlls/gdi32/libgdi32.a libs/dxguid/libdxguid.a libs/uuid/libuuid.a dlls/wined3d/libwined3d.a \ dlls/user32/libuser32.a dlls/win32u/libwin32u.a dlls/winecrt0/libwinecrt0.a \ dlls/kernel32/libkernel32.a dlls/ntdll/libntdll.a -lmsvcrt --- snip ---
--- snip --- $ ls -l dlls/dxgi/dxgi.dll -rwxr-xr-x 1 saukrs None 1020855 Jan 4 16:23 dlls/dxgi/dxgi.dll --- snip ---
https://bugs.winehq.org/show_bug.cgi?id=52338
Jacek Caban jacek@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever confirmed|0 |1 CC| |jacek@codeweavers.com
--- Comment #2 from Jacek Caban jacek@codeweavers.com --- It may seem weird, but I don't see a way to support -mcygwin on Cygwin :)
winecrt0 is linked to both modules converted to PE files and not converted ones. On PE targets, it means that those debug functions get linked to all modules. They need to get stderr, which depends on crt used. In -mcygwin case we should use Cygwin libc, but it was earlier built with msvcrt definitions. We get away with it on mingw because mingw crt is compatible with msvcrt in this case.
I don't see an easy way around it, you may disable problematic modules with configure options for now. The problem will not exist once we convert remaining modules to PE files.
https://bugs.winehq.org/show_bug.cgi?id=52338
--- Comment #3 from Saulius K. saulius2@gmail.com --- Thanks for clear explanation and the tip.
Do we have the bug/issue for converting remaining modules to PE files? It would be nice to add it as a blocker.
https://bugs.winehq.org/show_bug.cgi?id=52338
--- Comment #4 from Saulius K. saulius2@gmail.com --- Two other dlls that fails in similar manner:
dlls/wined3d/wined3d.dll dlls/opengl32/opengl32.dll