2017-10-17 57 views
0
线程文件

请在这个简单的程序C++看看:的libstdC++无法找到在Mac

#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; 
} 

我试图在Xcode在Mac OS塞拉利昂进行编译。它不会编译。它说'thread' file not found

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

+0

你安装的GCC版本是什么? – Jodocus

+1

这是正确的行为。 'std :: thread'可以从C++ 11中获得 – ProXicT

+0

什么是* exact *编译器和链接器命令行?和编译器/链接器版本? –

回答

1

随Xcode一起提供的libstdC++的版本很旧,并且不包括thread。 macOS上的pthreads缺少超时的某些功能(例如pthread_mutex_timedlock())。

你根本不能在macOS上一起使用std::thread和Xcode提供的libstdC++。要么你必须切换到libC++或使用不同的库boost::thread确实有效。 TinyThread++也是一个可以在macOS下与libstdC++一起使用的替代方案。

+0

完全可以在MacOS上安装和使用现代C++ 14工具链,并使用'std :: thread' 。 –

+0

诚然,这在Xcode的支持范围之外。我已经更新了我的答案,以反映我正在谈论Xcode附带的libstdC++ 4.2。 “我试图用macOS Sierra上的Xcode进行编译。”会表明提问者想要使用Xcode。 –