相關介紹資料以下:html
Boost編譯
http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/download 下載文件
http://www.boost.org/users/history/version_1_55_0.html 官方對於clang的說明狀況
關於clang的驗證
Linux:
Clang: 3.3, 3.2, 3.1, 3.0
如上可見,這個官方已經驗證過linux
ICE編譯
http://www.zeroc.com/download/Ice/3.5/Ice-3.5.1.tar.gz
http://www.zeroc.com/download/Ice/3.5/ThirdParty-Sources-3.5.1.tar.gz
http://www.zeroc.com/download/Ice 這裏有全部的版本
http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
這個官方已經聲明對於Linux下的clang不支持,不過不少人已經驗證過【在zeroc的論壇搜索clang能夠看到】c++
首先在以下站點下載這些C++工具庫bootstrap
http://www.zeroc.com/download/Ice/3.5/Ice-3.5.1.tar.gzbash
http://www.zeroc.com/download/Ice/3.5/ThirdParty-Sources-3.5.1.tar.gz工具
開工前首先須要把clang安裝好,具體參考 http://www.cnblogs.com/2018/p/3464638.html性能
以下是具體的配置步驟測試
boost boost_1_55_0.tar.gzui
bootstrap.sh
16,17,18
LIBDIR=/root/work/clang+llvm-3.3-amd64-Ubuntu-10.04.4/lib/c++
INCLUDEDIR=/root/work/clang+llvm-3.3-amd64-Ubuntu-10.04.4/lib/c++/v1
LIBS="c++"
211 增長
TOOLSET=clang
使用./b2 能夠進行編譯,在 stage/lib 下是編譯出來的 .a .so 等庫文件
ICE Ice-3.5.1.tar.gz ThirdParty-Sources-3.5.1.tar.gz
mcpp bzip須要編譯
Ice-3.5.1/cpp/config/Make.rules首行增長
CC=clang
CXX=clang++
CPP=clang -E
Ice-3.5.1/cpp/config/Make.rules.Linux
模仿g++,增長:ifeq ($(CXX),clang++)
bzlib.h 拷貝到 cpp/src下
libbz2.a 拷貝到 cpp/lib下
make
如上便可使用clang 編譯出來對應的庫,其中ice之編譯除了基礎庫,若是須要編譯其餘的模塊,相似處理便可
使用C++11和ice的混合使用的例子
#Ice非c11版本和c11版本的類混合使用
clang++ -c -I. -I/root/work/tmp/Ice-3.5.1/cpp/include Hello.cpp
clang++ -c -I. -I/root/work/tmp/Ice-3.5.1/cpp/include Client.cpp
clang -std=c++11 -stdlib=libc++ -I/root/work/clang+llvm-3.3-amd64-Ubuntu-10.04.4/lib/c++/v1 -c c11.cpp
clang++ -stdlib=libc++ -L/root/work/libs -o client Hello.o Client.o c11.o -lIce -lIceUtil -lc++
詳細的代碼和例子參考 http://pan.baidu.com/s/1nGab5
Clang編譯出的boost 和ice庫的使用http://pan.baidu.com/s/1nGab5 參考其餘的test目錄的具體代碼
其中一個例子測試了boost uuid的使用,clang的性能大致提高2%左右,看來clang的二進制性能仍是比較高的。
#!/bin/bash
:<<EOF
#驗證機器環境
#target=x86_64-linux-gnu
#Thread model: posix
#gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
###
EOF
pushd pkg
#2 boost
tar -xzvf boost_1_55_0.tar.gz -C .
cp -f pack/bootstrap.sh boost_1_55_0/.
#compile boost
pushd boost_1_55_0
./bootstrap.sh
./b2
#now boost_1_55_0/stage/lib 是clang編譯出來的庫
popd
#3 ICE
tar -xzvf Ice-3.5.1.tar.gz -C .
cp pack/Make.rules Ice-3.5.1/cpp/config/.
cp pack/Make.rules.Linux Ice-3.5.1/cpp/config/.
#dep mcpp
tar -xzvf ThirdParty-Sources-3.5.1.tar.gz -C .
pushd ThirdParty-Sources-3.5.1
tar -xzvf mcpp-2.7.2.tar.gz -C .
popd
pushd ThirdParty-Sources-3.5.1/mcpp-2.7.2
patch -p0 < ../mcpp/patch.mcpp.2.7.2
./configure CFLAGS=-fPIC --enable-mcpplib --disable-shared
cp -f ../../pack/mcpp_Makefile src/Makefile
pushd src
make
popd
popd
cp -f ThirdParty-Sources-3.5.1/mcpp-2.7.2/src/mcpp_out.h Ice-3.5.1/cpp/src/.
cp -f ThirdParty-Sources-3.5.1/mcpp-2.7.2/src/mcpp_lib.h Ice-3.5.1/cpp/src/.
cp -f ThirdParty-Sources-3.5.1/mcpp-2.7.2/src/.libs/libmcpp.a Ice-3.5.1/cpp/lib/.
#dep bz2
mkdir -p bzip2
tar -xzvf bzip2-1.0.6.tar.gz -C bzip2
pushd bzip2
cp -f ../pack/bzMakefile bzip2/Makefile
make
popd
cp -f bzip2/bzlib.h Ice-3.5.1/cpp/src/.
cp -f bzip2/libbz2.a Ice-3.5.1/cpp/lib/.
#compile ICE using clang
pushd Ice-3.5.1/cpp/src
make
popd
#libIce.so libIceUtil.so 和slice編譯出來,其餘的須要安裝對應的內容,沒有驗證
#ICE sample
cp -f pack/config.* Ice-3.5.1/cpp/demo/Ice/hello/.
pushd Ice-3.5.1/cpp/demo/Ice/hello
make
popd
#deploy library
cp -f Ice-3.5.1/cpp/lib/libIce* /usr/lib/.
#copy ICE測試驗證程序
mkdir -p ../test/ice
cp -f Ice-3.5.1/cpp/demo/Ice/hello/client ../test/ice/.
cp -f Ice-3.5.1/cpp/demo/Ice/hello/server ../test/ice/.
cp -f Ice-3.5.1/cpp/demo/Ice/hello/config.* ../test/ice/.
#cleanup
rm -r -f bzip2
rm -r -f ThirdParty-Sources-3.5.1
rm -r -f Ice-3.5.1
###
popd