【发布时间】:2013-09-27 21:20:23
【问题描述】:
--编辑 如果您想使用 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 运行一个程序时,它给了我 "error: 'thread'不是“std”的成员。
现在这是我所做的和我尝试过的:
我在 在cplusplus.com 上遵循某种模板或教程。
我的代码与网页上显示的完全相同(朝向底部)。
我尝试在代码块中使用编译器标志 “让 g++ 遵循 C++11 ISO 语言标准 -std=c++11”。
我也尝试过标记“让 g++ 遵循即将到来的 C++0x ISO 语言标准 -std=c++0x”
我同时尝试过,一次一个,没有。 我也尝试过手动这些命令。
我手动尝试的另一个命令是 -std=gnu++11,这是线程头中推荐的。
--编辑 似乎 __cplusplus 是 --编辑
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、代码块或一般情况下一起工作? 如果是这样,你是怎么做到的?任何可能有帮助的链接?有什么建议吗?
附:我知道还有其他线程方式,例如 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' 的成员
这可能是一个糟糕的构建吗?我会尝试其他版本... --编辑
【问题讨论】:
-
根据this answer,您需要一个 64 位版本的 Mingw 工具链。 (我自己从未尝试过。)
-
我使用的是正确的 MinGW,而不是 posix 线程我使用的是 Win32 线程(运行 GCC -v 命令确认 Win32 已设置为线程)。我将尝试下载 posix 版本,看看是否可行,但是,我确实希望这更像是一个 win32 线程应用程序。谢谢!
-
阿里,谢谢你,我已经尝试过你的文章帮助,但它仍然对我不起作用:(查看我的构建日志编译标志,我试图将它们与 fishfoods 尽可能匹配:i686-w64-mingw32-g++.exe -Wall -g -std=c++11 -c -Wc++11-compat -D__GXX_EXPERIMENTAL_CXX0X__ -c "F:\C Projects\Code Blocks\thread\main.cpp" -o obj\Debug\main.o
-
你得到什么错误?和你在标题中说的一样吗?您可以尝试将 -pthread 添加到编译器标志吗? (在 Linux 上工作,我不知道 -pthread 在 Windows 上的作用。)如果您仍然遇到相同的错误,那么最可能的解释是您的机器上出现了问题并且您包含了错误的头文件。我知道这对你没有多大帮助......对不起。 :(
-
这里是带有 -pthread 的标志,但是因为我使用 win32 作为线程,这将失败并且具有:i686-w64-mingw32-g++.exe -Wall -g -std=c+ +11 -c -std=gnu++11 -pthread -Wc++11-compat -D__GXX_EXPERIMENTAL_CXX0X__ -c "F:\C Projects\Code Blocks\thread\main.cpp" -o obj\Debug\main.o error: 'thread' is not a member of 'std' 请注意我知道它说 i686...g++.exe 但我尝试了目录中的所有 c++ 编译器,即我用 g++.exe c++ 尝试过.exe(显然它带有多个 c++ 编译器)。
标签: c++ multithreading gcc c++11 codeblocks