1

我正在尝试编译一个简单的 c++ 程序,该程序在 eclipse kepler / mingw 4.8.1 和 win32 上使用 std::thread。我希望在 Windows 开发多年后的某个时候将开发转移到 linux。

#include "test.h"
#include <thread>
#include <algorithm>


int main()
{
    Test::CreateInstance();

    std::thread(
        [&]()
        {
            Test::I()->Output2();
        }
    );

    Test::DestroyInstance();
    return 0;
}

忽略测试的目的(它是一个单例,它只产生一些输出,一旦我得到 std::thread 工作,我将对其进行扩展!)

我在 Eclipse 中设置的 g++ 编译器设置是:

-c -fmessage-length=0  -std=c++0x -Wc++0x-compat

我定义的预处理器符号是:

__GXX_EXPERIMENTAL_CXX0X__

构建抱怨 std::thread 不是 std 的成员:

    10:30:13 **** Incremental Build of configuration Debug for project test ****
Info: Internal Builder is used for build
g++ -D__GXX_EXPERIMENTAL_CXX0X__ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -Wc++0x-compat -o main.o "..\\main.cpp" 
..\main.cpp: In function 'int main()':
..\main.cpp:11:2: error: 'thread' is not a member of 'std'
  std::thread(
  ^

有人可以建议我可能缺少什么来正确编译吗?

4

3 回答 3

5

普通的 MinGW 不支持std::thread. 您将需要使用启用了“posix”线程的 MinGW-w64 工具链(例如 Qt 5 附带的工具链),以便 libstdc++ 公开<thread>,<mutex><future>功能。

您可以在此处找到安装程序,但您也可以尝试将整个mingw工具链根文件夹替换为其中一个包。你可以选择32位或64位,如果你想和朋友threads-posix一起玩记得选择。std::thread除了您已经拥有的那些之外,不需要特殊的编译器选项。-std=c++11如果您不需要 GCC 4.6 兼容性,我建议您使用。

于 2013-09-20T09:48:45.660 回答
0

我遇到了同样的问题,尽管我使用的是 Cygwin 编译器。我所做的是__cplusplus用预处理器的值定义符号201103L。我还-std=c++11为编译器使用了标志。必须为所有配置(调试和发布)进行此设置。

您可能要检查的另一件事是您是否已正确安装编译器,请按照 rubenvb 的说明验证您的编译器安装。

于 2014-09-25T17:25:45.630 回答
0

有关可以添加到任何 C++11 版本的 MinGW 的本机实现,请参见此处: https ://github.com/meganz/mingw-std-threads 它是一个仅限标头的库,因此您只需要包含项目中的标头,您将获得 C++11 线程和同步原语。

于 2014-12-11T11:25:50.507 回答