C ++ 11,GCC 4.8.1,Code :: Blocks,threading,头脑疼痛

时间:2013-09-23 03:38:46

标签: c++ multithreading gcc c++11 codeblocks

- 修改 如果您想使用MinGW GCC 8.4.1并且线程/互斥/期货/原子不下载Win32线程版本,请下载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”

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

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


- 修改 似乎 __ cplusplus 是< 201103L在线程头中声明(或定义)。 这只发生在我手动使用-std = c ++ 11时,出于某种原因C :: B如果手动设置则删除它,所以我必须使用复选框来使用这个标志...... 的 - 修改

工具链可执行文件选项卡下的编译器设置如下:

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

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

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

静态链接器: ar.exe

Debbuger: GDB / CDB调试器:默认

资源编译器: windres.exe

制作节目: mingw32-make.exe

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

有没有人能够使用MinGW GCC,代码块或一般的线程? 如果是这样你是怎么做到的?任何可能有帮助的链接?有什么建议吗?

P.S。我知道还有其他类似线程的方法,如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 Projects \ Code Blocks \ thread \ main.cpp”

仍然返回错误:'thread'不是'std'的成员

这可能是一个糟糕的构建?我会尝试其他修改...... 的 - 修改

4 个答案:

答案 0 :(得分:3)

答案可能要迟到了,但这对我有用:

1。从以下网址获取x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb.7z:

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

2. 使用

在代码块中设置新编译器
  • 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. 为项目设置新编译器

  • 右键点击您的项目 - >构建选项
  • 选择新编译器
  • 在编译器falgs下检查-std = c ++ 0x和-std = c ++ 11
  • 在其他选项下设置-std = gnu ++ 11

4. 享受c ++ 11并发性

希望这对您也有用,作为替代方案,您可以使用visual studio。

答案 1 :(得分:0)

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

答案 2 :(得分: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();
}

答案 3 :(得分: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

我希望这会有所帮助。