【发布时间】:2014-09-20 17:46:03
【问题描述】:
我正在为我当前的项目尝试一些 c++11 线程支持,但面临瓶颈。我使用 rubenvb 构建的 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-experimental(也由 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
【问题讨论】:
-
你能从命令行试试吗?
g++ -std=c++0x -Wall -Wextra -O0 -ggdb -lpthread -mthreads -pthread -Wno-unknown-pragmas test${BUILD}.cpp?