'thread'不是GCC 4.8中'std'的成员
'thread' is not a member of 'std' in GCC 4.8
我正在为我当前的项目尝试一些c++11线程支持,但面临瓶颈。我使用了由rubendb构建的gcc 4.8.0(直接从sourceforge下载)[x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb],发现它似乎不支持c++11线程功能。以下代码编译失败,并报告'thread' is not a member of 'std'
。通过谷歌搜索,有一个4.7的实验(也是由rubenvb创建的),支持std线程。作为我主要项目的一部分,我需要4.8版本的其他C++11功能,我还没有尝试4.7版本。请帮助澄清我下载的工具链是否启用了线程。
平台:Window x64,Qt 4.8(使用下载的gcc工具链从源代码构建)
- 由于Qt库是从源代码构建的,更改工具链意味着重新编译整个库集,这对我来说很糟糕。两个文件或gcc中都遗漏了什么吗?谢谢
更新:刚刚下载了实验版4.8[x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb],并编译了测试代码。所以现在的问题是
"‘实验’版本使用安全吗?"
使用的测试代码
#include <iostream>
#include <thread>
#include <mutex> // try other c++11 threading feature
void doSomeWork( void ) { std::cout << "hello from thread..." << std::endl; }
int main() {
std::mutex m; // also fail here
std::thread t( doSomeWork );
t.join();
return 0;
}
和使用的makefile
CC := g++
SRC := test$(BUILD).cpp
OBJ := $(SRC:.cpp=.o)
BIN := test$(BUILD).exe
CXXFLAGS := -std=c++0x -Wall -Wextra -O0 -ggdb -lpthread -mthreads -pthread -Wno-unknown-pragmas
clean : ; del /a/s $(BIN) $(OBJ)
all : $(BIN) ; del $(OBJ)
$(BIN) : $(OBJ) ; $(CC) $(CXXFLAGS) $^ -o $@
%.o : %.cpp ; $(CC) -c $(CXXFLAGS) $< -o $@
.PHONY: clean all
如果您使用的是win32,那么Mingw-Builds似乎有两种不同的线程模型:
Mingw Builds(和实验性的rubenvb包)也让您在(lib)gcc:内部使用的线程模型之间进行选择
posix(建立在MinGW-w64的winpthreads之上)"posix的实现win32的线程也可以在实验目录下找到。
- 它的主要目标是支持C++11标准线程,它支持目前仅使用POSIX线程。"http://mingw-w64.sourceforge.net/
- 启用C++11库功能包含在头线程、互斥对象和future中
- 性能在特定情况下的退化。C++11的功能是明显慢于本机Win32实现,甚至MSVS2012的实施
win32使用本机win32线程功能。
- 没有C++11线程、互斥锁或未来
- 最佳性能
来源:http://qt-project.org/wiki/MinGW-64-bit
相关文章:
- std::ofstream 作为类成员删除复制构造函数?
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- std::to_string - 'to_string' 不是 'std' 的成员 - Visual Studio Code 1.42.0
- 使用 std::async 时死锁,将来作为成员
- 可变参数模板参数扩展 类型为 std::function 的类成员
- FreeFileSync C++错误:'byte'不是 'std' 的成员
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- 在模板化成员函数的返回类型中使用 std::enable_if 时的编译器差异
- 有没有办法避免为 std::variant 类成员中的所有类型编写构造函数?
- 是否允许类类型的 std::function 成员变量(不完整类型)?
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- std::异步与非静态成员函数
- 如何在 c++11 中静态断言 std::array 类成员进行排序?
- 将初始化器列表/聚合初始化转发到 std::array 成员
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- 在哪里可以找到 std::bitset 的数据成员?
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- unique_ptr问题:不是'std'成员
- std::成员函数的异步调用