在 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
使用第一个可执行文件应该可以解决您的问题。
我 运行 在 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
:使用posixx86_64-w64-mingw32-g++-win32
:使用 win32
使用第一个可执行文件应该可以解决您的问题。