libstdc ++在Mac上找不到线程文件

时间:2017-10-17 16:29:53

标签: c++ xcode macos c++11 libstdc++

请看一下这个简单的C++计划:

#include <iostream>
#include <thread>

void thread_test()
{
    std::cout << "Thread test\n";
}

int main(int argc, const char * argv[])
{
    std::thread t(thread_test);
    t.join();

    return 0;
}

我正在尝试使用macOS Sierra上的Xcode编译它。它不编译。它说'thread' file not found

在构建设置中,我使用libstdc++ (GNU C++ standard library) C++ Standard Library选项。如果我将此设置切换为libc++ (LLVM C++ standard library with C++11 support),那么它就可以了,它会编译。但我的目标是使用libstdc++而不是libc++以某种方式编译它。它甚至可能吗?你能给我一点建议吗?

1 个答案:

答案 0 :(得分:1)

Xcode附带的libstdc ++版本非常陈旧,并且不包含pthread_mutex_timedlock()。 macOS上的pthreads缺少一些超时函数(例如std::thread)。

您根本无法在macOS上同时使用boost::thread和Xcode提供的libstdc ++。您必须切换到libc ++或使用不同的库Message::whereIn('conversation_id',$msgs) ->where('deleted', '!=', $userId) ->with(array('last_sender' =>function($query) use ($userId){ $query->where('id','!=', $userId); $query->select('id', 'userName', 'profilePic','firstName', 'lastName'); })) ->with(array('last_reciever' =>function($query) use ($userId){ $query->where('id','!=', $userId); $query->select('id', 'userName', 'profilePic','firstName', 'lastName'); })) ->orderBy('id', 'desc') ->orderBy('conversation_id', 'desc') ->groupBy('id') ->groupBy('conversation_id') ->get(); 才能正常工作。 TinyThread++也是使用libstdc ++在macOS下工作的替代方法。