2015-06-08 7 views
10

मैं अपने गिट भंडारों के स्वचालित परीक्षण निर्माण करने के लिए travis.ci का उपयोग कर रहा हूं।क्लैंग 3.4 सी ++ 14 समर्थन

लिनक्स के लिए वे का उपयोग करें: Ubuntu 12.04
साथ बजना 3.4

clang page सभी सी ++ 14 भाषा सुविधाओं बजना 3.4 द्वारा समर्थित हैं के अनुसार (जब तक आप -std = C++ 1 वर्ष ध्वज का उपयोग करें) ।

अब तक तो अच्छा:
मैं भी std::index_sequence<t0,...,tn> जो पुस्तकालय N3658 नहीं सुविधा के लिए एक भाषा की सुविधा है उपयोग करने के लिए की जरूरत है। लेकिन यह सुनिश्चित करने के लिए कि यह सुविधा समर्थित है (यह बॉक्स से समर्थित नहीं है) को क्लैंग के लिए सी ++ मानक लाइब्रेरी को अपडेट करने पर मुझे कोई विशिष्ट दस्तावेज नहीं मिल रहा है।

TestCode:

#include <utility> 
int main() { 
    std::index_sequence<1,2,3,4> seq; 
} 

TestBuild:

> clang++ -std=c++1y pl.cpp 
pl.cpp:3:10: error: no member named 'index_sequence' in namespace 'std' 
    std::index_sequence<1,2,3,4> seq; 
    ~~~~~^ 
pl.cpp:3:37: error: use of undeclared identifier 'seq' 
    std::index_sequence<1,2,3,4> seq; 
            ^
2 errors generated. 

अद्यतन:

सुझाव के आधार पर नीचे मैं libC++ का उपयोग करने की कोशिश की।
बहुत यकीन है कि मैंने कुछ गलत किया है लेकिन मैंने कभी भी वैकल्पिक मानक लाइब्रेरी का उपयोग करने की कोशिश नहीं की है, इसलिए मुझे यकीन नहीं है कि यहां क्या गलत हो रहा है। आज रात में खुदाई होगी। लेकिन अगर आपके पास कोई सुझाव है तो कृपया एक टिप्पणी छोड़ दें।

> sudo apt-get install -qq libc++1 libc6 libc++-dev 

> clang++ -stdlib=libc++ pl.cpp 
pl.cpp:1:10: fatal error: 'utility' file not found 
#include <utility> 
     ^
1 error generated. 
+5

क्या होगा यदि आप ++ libc का उपयोग libstdc के बजाय ++? '-stdlib = libC++' – Praetorian

उत्तर

3

वैसे उत्तर जी ++ - 4.9 स्थापित करने के लिए प्रतीत होता है यह मानक पुस्तकालयों को पहले से स्थापित किया जाएगा जहां क्लैंग कोड को संकलित करने में सक्षम होगा।

sudo apt-get install python-software-properties 
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test 
sudo apt-get update 
sudo apt-get install g++-4.9 

## Because I also use llvm-cov from my makefile 
## I have to make sure it is in the path. 
a=$(sudo find/-name llvm-cov | head -1) 
sudo ln -s ${a} /usr/bin/llvm-cov 

तो यह है कि मैं क्या travis.yml फ़ाइल

before_install: 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then sudo apt-get update;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then sudo apt-get install g++-4.9;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then a=$(sudo find/-name llvm-cov | head -1);sudo ln -s ${a} /usr/bin/llvm-cov;fi 

को जोड़ा गया मैं के बाद मेरे जी ++ और बजना ++ पूर्व निर्माण कोड को मजबूत:

before_install: 
    - if [ "$TRAVIS_OS_NAME" == "linux"];       then sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux"];       then sudo apt-get update;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux"];       then sudo apt-get install -qq g++-4.9;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "g++" ];  then sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 90;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "g++" ];  then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 90;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "g++" ];  then sudo update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-4.9 90;fi 
    - if [ "$TRAVIS_OS_NAME" == "linux" -a "$CXX" == "clang++" ]; then a=$(sudo find/-name llvm-cov | head -1);sudo ln -s ${a} /usr/bin/llvm-cov;fi 
1

https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html के अनुसार, libstdC++ इस का समर्थन करता है कम से कम सबसे हाल के संस्करण दिया। उबंटू 12.04 में GCC 4.4 है, जहां यह स्पष्ट रूप से समर्थित नहीं है। precise-backports में libstdC++ का एक नया संस्करण नहीं है।

हालांकि, https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test के माध्यम से, जीसीसी के नए संस्करण और इसके साथ, libstdC++ प्राप्त किया जा सकता है। मुझे नहीं पता कि ट्रैविस अन्य भंडारों से स्थापित करने का समर्थन करता है या नहीं, हालांकि।

+1

CLang ** ** ** gcc नहीं है। –

+1

@ सर्ज लेकिन क्लैंग सबसे निश्चित रूप से libstdC++ का उपयोग कर सकता है अगर अन्यथा निर्देश नहीं दिया जाता है .. – rubenvb

+1

@ सर्जबेलस्टा क्लैंग डिफ़ॉल्ट रूप से जीएनयू libstdC++ और हेडर का उपयोग करता है। स्पष्ट रूप से यह एक कंपाइलर मुद्दा नहीं है, लेकिन एक मानक पुस्तकालय एक है। –

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