在 ubuntu mingw 上指定线程模型(如果可能)

Specify thread model on ubuntu mingw (if possible)

我 运行 在 linux 上用 g++ 编写了一个程序,一切正常。如果我使用 x86_64-w64-mingw32-g++ 编译,它会因 error: ‘std::thread’ has not been declared.

而崩溃

我的代码崩溃的部分相当简单:

#include <thread>

int main()
{
    int cores = std::thread::hardware_concurrency();
}

我发现 mingw 使用 win32 线程,我希望它使用 posix 线程。版本是:

:~$ x86_64-w64-mingw32-g++ -v
Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-w64-mingw32/9.3-win32/lto-wrapper
Target: x86_64-w64-mingw32
Configured with: ../../src/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/include' --mandir='/usr/share/man' --infodir='/usr/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-shared --enable-static --disable-multilib --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --libdir=/usr/lib --enable-libstdcxx-time=yes --with-tune=generic --with-headers=/usr/x86_64-w64-mingw32/include --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libgomp --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-lto --enable-threads=win32 --program-suffix=-win32 --program-prefix=x86_64-w64-mingw32- --target=x86_64-w64-mingw32 --with-as=/usr/bin/x86_64-w64-mingw32-as --with-ld=/usr/bin/x86_64-w64-mingw32-ld --enable-libatomic --enable-libstdcxx-filesystem-ts=yes --enable-dependency-tracking
Thread model: win32
gcc version 9.3-win32 20200320 (GCC)

如您所见,线程模型是 win32,(如何)我可以更改它吗?在 mingw include paths 中有一个 9.3-posix 文件夹,但似乎到目前为止还没有使用它。

如您所见here您可以:

I'm installing mingw-w64 on Windows and there are two options: win32 threads and posix threads.

linux 也可以吗?

似乎包 g++-mingw-w64-x86-64 提供了两个可执行文件:

  • x86_64-w64-mingw32-g++-posix:使用posix
  • x86_64-w64-mingw32-g++-win32:使用 win32

使用第一个可执行文件应该可以解决您的问题。