在 2025-01-24 14:45, Werner LEMBERG 写道:
we use mingw to create static LilyPond binaries for Windows (using
g++).  The default build system is Ubuntu, and everything's fine:
`-pthread` is added to the compilation step, and `-pthread
-static-libgcc` while linking.

However, running exactly the same script on OpenSUSE, 'libwinpthread'
is not statically linked into the binary.  We solve this locally by
adding

The default mingw-w64 GCC on Debian and Ubuntu uses Win32 thread model by 
default:

    $ x86_64-w64-mingw32-gcc -v 2>&1 | grep '^Thread model:'
    Thread model: win32

    $ x86_64-w64-mingw32-gcc-posix -v 2>&1 | grep '^Thread model:'
    Thread model: posix

Although I am not familiar with OpenSUSE, I suspect their GCC uses POSIX thread 
model...?

The difference is that, if GCC has been configured with a mingw target, it has `-pthread` as a default library [1] [2] and (unless `-static` is specified) prefers a shared library.

The solution is to pass `-no-pthread` to GCC or use a GCC with Win32 thread model; either way, you will have to link against a static winpthread yourself, by passing these options to the linker [3]:

    -l:libwinpthread.a -lmsvcrt -lkernel32


[1] https://github.com/gcc-mirror/gcc/blob/aa73eb97a1e3c84564fa71158d09f9c5582c4d2e/gcc/config/i386/mingw-pthread.h#L21 [2] https://github.com/gcc-mirror/gcc/blob/aa73eb97a1e3c84564fa71158d09f9c5582c4d2e/gcc/config/i386/mingw32.h#L62
[3] 
https://github.com/brechtsanders/winlibs_mingw/issues/232#issuecomment-2262666751



--
Best regards,
LIU Hao

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to