3

--EDIT 如果你想使用 MinGW GCC 8.4.1 和 threads/mutex/futures/atomics 不要下载 Win32 threader 版本 insted 下载 Posix 版本。 - 编辑

我的MinGW安装如下:x32-4.8.1-release-win32(作为线程)-sjlj rev 5

我已解压并正确确认MinGW GCC 4.8.1(修订版 5)安装在 C:\MinGW\mingw32 中。 我已经设置了代码块以在正确的路径中寻找最新最好的编译器(我确信这一点)。我可以使用#include iostream编译一个普通程序。 好的,现在当我尝试使用#include thread运行程序时,它给了我“错误:'thread'不是'std'的成员”。

现在这是我所做的和我尝试过的:

我在cplusplus.com上关注一种模板或教程 。 我的代码与网页上显示的代码完全相同(朝向底部)。 我在代码块中尝试使用编译器标志“让 g++ 遵循 C++11 ISO 语言标准 -std=c++11”。

我还尝试了标志“让 g++ 遵循即将到来的 C++0x ISO 语言标准 -std=c++0x”

我同时尝试过,一次一个,没有。我也手动尝试了这些命令。

我手动尝试的另一个命令是线程头中推荐的 -std=gnu++11 。


--EDIT 似乎__cplusplus是 < 201103L ,它在线程头中声明(或更确切地说是定义)。这只发生在我手动使用 -std=c++11 时,出于某种原因,如果手动声明它,C::B 会删除它,所以我必须使用复选框来使用这个标志 ...--编辑

我在Toolchain Executables 选项卡下的编译器设置如下:

C编译器:i686-w64-mingw32-gcc-4.8.1.exe

C++编译器:i686-w64-mingw32-c++.exe

动态链接器:i686-w64-mingw32-c++.exe

静态链接器:ar.exe

调试器:GDB/CDB 调试器:默认

资源编译器:windres.exe

制作程序:mingw32-make.exe

我已经尝试在 bin 文件夹中使用其他可执行文件,但仍然没有运气......我开始怀疑 GCC 是否支持 C++11 或线程!?

有没有人能够让线程与 MinGW GCC、代码块或一般情况下一起工作?如果是这样,你是怎么做到的?任何可能有帮助的链接?有什么建议吗?

PS我知道还有其他线程方式,如posix或其他SDK,如SFML(我已成功尝试使用此线程)。但是我想使用 GCC 线程,我很困惑为什么看到所有必要的文件都这么难......

--编辑 我发现,当我在代码块之外手动编译程序时,我仍然会遇到相同的错误,无论我使用 g++ c++ 还是 i686-w64-mingw32-g++/c++

这是我运行来构建文件的命令:

C:\MinGW\mingw32\bin>g++.exe -D__GXX_EXPERIMENTAL_CXX0X__ -o0 -g3 -Wall -c -fmes sage-length=0 -std=c++11 -Wc++11-compat -o obj\Debug\main .o "F:\C 项目\代码块\thread\main.cpp"

仍然返回错误:“线程”不是“标准”的成员

这可能是一个糟糕的构建吗?我会尝试其他版本 ...--编辑

4

4 回答 4

3

probably to late for an answere, but here is what worked for me:

1. Get x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb.7z from:

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/rubenvb/gcc-4.8-experimental-stdthread/

2. Setup a new compiler in codeblocks with

  • x86_64-w64-mingw32-gcc-4.8.1.exe
  • x86_64-w64-mingw32-g++.exe
  • x86_64-w64-mingw32-g++.exe
  • ar.exe
  • windres.exe
  • mingw32-make.exe

3. Set the new compiler for your project

  • Right click in your project -> build options
  • Select the new compiler
  • Under compiler falgs check -std=c++0x and -std=c++11
  • Under Other options set -std=gnu++11

4. Have fun with c++11 concurrency

Hope that works for you also, as an alternative you can just use visual studio.

于 2013-12-28T15:22:08.337 回答
0

我有同样的问题,我安装了最新的 MinGW-Builds

http://sourceforge.net/projects/mingwbuilds/files/mingw-builds-install/ 并将我的工具链可执行文件设置为:

x86_64-w64-mingw32-gcc-4.8.1.exe
x86_64-w64-mingw32-g++.exe
x86_64-w64-mingw32-g++.exe
ar.exe
windres.exe
mingw32-make.exe

我希望这有帮助。

于 2013-10-17T03:14:59.443 回答
0

gcc 4.8.1 是完整的 C++11 功能。我无法谈论 Windows 的实现,但可以肯定的是在 Linux 和 OS X 上它可以像宣传的那样工作,包括所有的并发功能。我只是#include <thread>打电话g++ -std=gnu++11,它起作用了。这是一段编译得很好的最小代码:

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mx;
int i;

void thrfunc();

int main(void)
{
   i=0;
   std::thread          thr1(thrfunc),thr2(thrfunc);

   thr1.join();
   thr2.join();

   return 0;
}

void thrfunc()
{
   mx.lock();
   i++;
   std::cout << std::this_thread::get_id() << " i: " << i << std::endl;
   mx.unlock();
}
于 2013-09-23T04:19:57.997 回答
0

我认为您的意思是 GCC 4.8.1 - 答案是肯定的,它支持一组 C++11 功能,包括部分多线程支持。请访问http://gcc.gnu.org/releases.html查看支持的设置。

于 2013-09-23T03:45:57.497 回答