Fw: [分享] 在CentOS 7建置Clang編譯環境

看板C_and_CPP (C/C++)作者 (眾生都是未來佛)時間11年前 (2014/08/29 12:10), 11年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 Linux 看板 #1J__eXfd ] 作者: zxvc (眾生都是未來佛) 看板: Linux 標題: [分享] 在CentOS 7建置Clang編譯環境 時間: Fri Aug 29 11:57:14 2014 以下文章將教你如何在CentOS 7上建置可建置(build)C++11程式的環境。 Clang是一套Linux/UNIX上支援C++11很完整的編譯器,是Apple開發出來的。 RHEL的EPEL repo有提供Clang的package,但没有C++ libraries的package, 所以這個部分較麻煩,要自己抓源始碼建。 Apple有提供Clang專用的C++ libraries - libc++ (libcxx)[1]。 libcxx又要使用一種ABI的東西(我不是很懂), Apple也有提供,叫libc++abi (libcxxabi)[2]。 但這兩個libs正常來講有循環相依的問題。 要打破循環相依,libc++支援在建置時不必連結libc++abi。 這樣我們就能先建一個没連結libc++abi的libc++。 接著就可以建libc++abi。再來有了libc++abi, 就能建一個連結libc++abi的libc++。 Clang & libc++ & libc++abi環境建置步驟如下: 1. 加入RHEL的EPEL repo。 去以下連結的"How can I use these extra packages?" 找CentOS對應版本的epel package安裝。 https://fedoraproject.org/wiki/EPEL 例如: sudo rpm -i \ http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/7/x86_64/\ epel-release-7-0.2.noarch.rpm 2. 安裝Subversion,以取得libcxx與libcxxabi。 sudo yum install svn 3. 安裝Clang。 sudo yum install clang 4. 安裝cmake。 cd /usr/local wget http://www.cmake.org/files/v3.0/cmake-3.0.1-Linux-i386.sh sudo ./cmake-3.0.1-Linux-i386.sh # 確認cmake有没有裝到/usr/local/bin。 5. 第一輪建造libcxx(不使用libcxxabi). # Get libcxx. svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx cd libcxx mkdir tmp cd tmp cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .. sudo make install sudo ln -s /usr/lib/libc++.so.1 /lib64 cd .. rm tmp -rf cd .. 6. 建造libcxxabi。 # Get libcxxabi. svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi cd libcxxabi/lib # 因為epel的clang没有llvm-config,所以我們不用cmake來建造libcxxabi, # 而使用傳統的buildit。 ./buildit sudo cp libc++abi.so.1.0 /usr/lib sudo ln -s /usr/lib/libc++abi.so.1.0 /usr/lib/libc++abi.so.1 sudo ln -s /usr/lib/libc++abi.so.1.0 /usr/lib/libc++abi.so cd ../.. 7. 第二輪建造libcxx(使用libcxxabi) cd libcxx mkdir tmp cd tmp cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \ -DLIBCXX_CXX_ABI=libcxxabi \ -DLIBCXX_LIBCXXABI_INCLUDE_PATHS=../../libcxxabi/include .. sudo make install 8. 用Clang測試建置。 vim t.cpp ~~~~~~~~~~~~~~~~~~~~~~~~~~~ #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~ clang++ -std=c++11 -stdlib=libc++ -lc++abi t.cpp ./a.out 後記: 1. 以上步驟應該跟CentOS 6上差不多,我曾經在6上也建成功, 只是印象要改一點東西...大家自己試試。 記得CentOS 5不幸没有已編好的Clang package。 2. 以上步驟有很多ln -s連來連去,但很多是必要的。因為Clang跟LD很笨(!?), 例如:有的tool只去抓libc++abi.so,有的人只去抓/lib64/libc++.so.1。 這部分可能不同OS又不同,要自己判斷一下。 3. Clang也支援GCC的libsupc++,但我在CentOS沒build成功過。建議用libc++。 References: [1] http://libcxx.llvm.org/ [2] http://libcxxabi.llvm.org/ -- 楞嚴咒(附注音): http://sdrv.ms/130iapv -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.73.148 ※ 文章網址: http://www.ptt.cc/bbs/Linux/M.1409284641.A.A67.html ※ 編輯: zxvc (140.115.73.148), 08/29/2014 11:58:35 ※ 編輯: zxvc (140.115.73.148), 08/29/2014 12:09:21 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: zxvc (140.115.73.148), 08/29/2014 12:10:39
文章代碼(AID): #1J__r1kq (C_and_CPP)
文章代碼(AID): #1J__r1kq (C_and_CPP)