[英]threading support in Clang++ 3.3 for C++11
這篇文章底部的代碼可以正常編譯,但是會生成一個無用的二進制文件
$ clang++ -v
clang version 3.3 (trunk 168461)
Target: x86_64-unknown-linux-gnu
Thread model: posix
當給出此命令時
clang++ -std=c++11 -pthread -s -O3 -DNDEBUG source.cpp -o source
二進制文件總是會產生這個
terminate called after throwing an instance of 'std::system_error'
what(): Operation not permitted
Aborted (core dumped)
我不明白的是:
-std=c++11
還不夠? -pthread
,根據我的閱讀,它應該支持pthreads 謝謝。
#include <iostream>
#include <thread>
void f()
{
std::cout << "Hello World\n";
}
int main()
{
std::thread t(f);
t.join();
}
您應該使用如下命令:
clang ++ -std = c ++ 11 -pthread -stdlib = libstdc ++ threadEx.cpp
您忘記添加庫。 libc ++在ubuntu 12.04,clang3.3上不適合我,但我在clang3.3和g ++ 4.7.2上使其起作用(g ++ 4.6.3也不起作用)。 兩者都可以。
在thread.cc中,thread :: _ M_start_thread()中包含以下代碼:
if (!__gthread_active_p())
__throw_system_error(int(errc::operation_not_permitted));
這就是為什么它給您帶來了麻煩--- libgcc檢查pthread_cancel()是否存在,如果存在則僅返回1。 您沒有指定-pthread,因此沒有pthread_cancel()。
為什么在構建時需要指定-pthread? 我猜這是因為替代方法是一直使用-pthread,這會導致不必要的開銷。
使用-pthread
標志在編譯代碼時有很大的不同,請參見gcc-編譯時-pthread標志的含義 。
根據對問題的公認答案,
在clang中,g ++的-pthread等值是什么?
,clang支持
-pthread
。
實際上,您發布的這一行表明您正在使用pthreads:
Thread model: posix
Pthread不會消失 ,我高度懷疑Clang / LLVM是否將從頭開始實現新的線程庫。 他們為什么會呢? 該平台的本機庫已經足夠成熟。
抱歉,我無法進一步幫助您:我的計算機上沒有安裝clang,並且您的代碼在使用gcc 4.6的計算機上可以正常運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.