2017-10-17 190 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。 –