- 修改 如果您想使用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'的成员
这可能是一个糟糕的构建?我会尝试其他修改...... 的 - 修改
答案 0 :(得分:3)
1。从以下网址获取x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb.7z:
2. 使用
在代码块中设置新编译器3. 为项目设置新编译器
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
我希望这会有所帮助。