2013-05-16 10 views
5

私はLinuxマシン(ubuntu)上で本当に簡単なスレッドプログラムをコンパイルしようとしていますが、libC++を指定してもclangが私にエラーを投げかけているようです。私のプログラムは次のとおりです。式はintergral定数ではありません。clang libC++ thread

#include <iostream> 
#include <thread> 

void call_from_thread() { 
    std::cout << "Hello, World!" << std::endl; 
} 

int main() 
{ 
    std::thread t1(call_from_thread); 

    t1.join(); 
    return 0; 
} 

メイク:

CC=clang++ 
CFLAGS=-std=c++11 -stdlib=libc++ -pthread -c -Wall 
#proper declaration of libc++, but still an error... 
LDFALGS= 
SOURCES=main.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=bimap 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
     $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 

.cpp.o: 
     $(CC) $(CFLAGS) $< -o [email protected] 

特定のエラー:

In file included from main.cpp:2: 
In file included from /usr/include/c++/4.6/thread:37: 
/usr/include/c++/4.6/chrono:666:7: error: static_assert expression is not an 
     integral constant expression 
     static_assert(system_clock::duration::min() 
    ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
1 error generated. 
make: *** [main.o] Error 1 

打ち鳴らすがあるため、libcの++を使用していない理由を私はよく分かりませんもし私が間違っていないなら、clangはこのライブラリを使ってスレッドをコンパイルします。どんな助けもありがとう!

+0

おそらく、私たちにclangが提供するエラーを表示します。 – hetepeperfan

+0

あなたは間違って 'LDFLAGS'を綴りました。 – kennytm

+2

これは既知の問題であることに注意してください。 [LLVM report](http://llvm.org/bugs/show_bug.cgi?id=12893)、[Ubuntu report](https://bugs.launchpad.net/ubuntu/+source/clang/+bug/1081905) )、[Debian report](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666539)、[Clangメーリングリスト](http://lists.cs.uiuc.edu/pipermail/cfe -dev/2011-June/015641.html) – Albert

答えて

3

libC++のいくつかの(以前の)バージョンでは、一部の機能にconstexprとマークされていないため、static_assertで使用できません。 system_clock::duration::min()が実際にそのようにマークされていることを確認する必要があります。 [numeric_limitsをチェックアウトする必要があるかもしれません。なぜなら、問題があった場所を思い出しているからです。

良いことに、問題がある場合は、constexprを数値制限ヘッダーファイルに追加することができますあなた自身;他の問題は発生しません。

関連する問題