2013-05-16 21 views
5

नहीं है, मैं अपने लिनक्स मशीन (उबंटू) पर एक बहुत ही सरल थ्रेड प्रोग्राम संकलित करने की कोशिश कर रहा हूं, लेकिन जब भी मैं libC++ निर्दिष्ट करता हूं तब भी क्लैंग मुझे एक त्रुटि फेंकने लगता है। मेरा कार्यक्रम है:अभिव्यक्ति एक अंतराल निरंतर clang libC++ थ्रेडिंग

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

makefile:

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 का उपयोग नहीं कर रहा है ++ नहीं कर रहा हूँ, क्योंकि अगर मैं गलत नहीं हूं तो इस पुस्तकालय का उपयोग करके धागे संकलित करेंगे। किसी भी मदद की सराहना की है!

+0

शायद हमें त्रुटि क्लैंग प्रदान करता है। – hetepeperfan

+0

आपने गलत तरीके से 'एलडीएफएलजीएस' लिखा है। – kennytm

+2

ध्यान दें कि यह एक ज्ञात मुद्दा है। [एलएलवीएम रिपोर्ट] (http://llvm.org/bugs/show_bug.cgi?id=12893), [उबंटू रिपोर्ट] (https://bugs.launchpad.net/ubuntu/+source/clang/+bug/1081905), [डेबियन रिपोर्ट] (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666539), [क्लैंग मेलिंगलिस्ट] (http://lists.cs.uiuc.edu/pipermail/cfe -dev/2011-जून/015641.html) – Albert

उत्तर

3

libC++ के कुछ (पहले) संस्करणों में, कुछ कार्यों को constexpr के रूप में चिह्नित नहीं किया गया था, जिसका अर्थ है कि उनका उपयोग static_assert में नहीं किया जा सकता है। आपको यह जांचना चाहिए कि system_clock::duration::min() वास्तव में उस तरह से चिह्नित है। [आपको शायद numeric_limits जांचना होगा, क्योंकि मुझे लगता है कि समस्या थी]

अच्छी खबर यह है कि, यदि यह समस्या है, तो आप संख्यात्मक सीमा शीर्षलेख फ़ाइल में constexpr जोड़ सकते हैं स्वयं; यह किसी भी अन्य समस्या का कारण नहीं होगा।

संबंधित मुद्दे