https://bugs.winehq.org/show_bug.cgi?id=57337
Bug ID: 57337 Summary: wineg++ does not play well with libcxx 18.1.8 headers Product: Wine Version: 9.20 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: minor Priority: P2 Component: winelib Assignee: wine-bugs@winehq.org Reporter: zerica@callcc.eu Distribution: ---
Created attachment 77299 --> https://bugs.winehq.org/attachment.cgi?id=77299 build log of `wineg++ hello.cpp`, where hello.cpp includes iostream
including iostream in any file that's being built through wineg++ confuses libcxx if it's the main c++ stdlib implementation, since the latter supports win32 as a proper target. for example, it tries to redefine locale_t in https://github.com/llvm/llvm-project/blob/llvmorg-18.1.8/libcxx/include/__su..., which conflicts with the definition in bits/alltypes (as the first error in the attached log shows). that file is included from https://github.com/llvm/llvm-project/blob/llvmorg-18.1.8/libcxx/include/__lo..., which is guarded by a macro defined in https://github.com/llvm/llvm-project/blob/llvmorg-18.1.8/libcxx/include/__co..., which is likewise guarded by the _WIN32 define set by winegcc in https://gitlab.winehq.org/wine/wine/-/blob/wine-9.20/tools/winegcc/winegcc.c....
those symbols are unconditionally passed to the c compiler by winegcc, so a possible solution would be adding a flag that skips those definitions. that would make working around these issues on a case by case basis possible.