Strona projektu:
Nakładania patch-a jest proste, aczkolwiek kompilacja trochę trwała. Na samym początku miałem problem związany z błędem podczas linkowania clang-a. Rozwiązaniem okazało się zwiększenie pamięci do 2GB dla mojej wirtualnej maszyny (VritulBox). Poniżej wszystkie kroki (skopiowane ze strony projektu).
svn co http://llvm.org/svn/llvm-project/llvm/branches/release_32 llvm cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/branches/release_32 clang cd ../.. cd llvm/tools/clang/tools svn co http://llvm.org/svn/llvm-project/clang-tools-extra/branches/release_32 extra cd ../../../.. cd llvm/projects svn co http://llvm.org/svn/llvm-project/compiler-rt/branches/release_32 compiler-rt cd ../.. cd llvm/tools/clang patch -p0 -i ~/templight.diff cd ../../.. mkdir build (for building without polluting the source dir) cd build ../llvm/configure makeAby skompilować narzędzie (wykorzystuje Qt oraz graphviz) trzeba było doinstalować kilka paczek:
sudo apt-get install graphviz sudo apt-get install libgraphviz-dev sudo apt-get install qt-sdk # Ścieżki do bibliotek export QTDIR=/usr/share/qt4 export MANPATH=$QTDIR/doc/man:$MANPATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH PATH=$QTDIR/bin:$PATH # Budowanie cd ProfileDataViewer qmake makeJeżeli w programie korzystamy z szablonów np. dostarczonych przez bibliotekę standardową wyników może być całkiem sporo (może być tu przydatny breakpoint - program Templar). Na początku pojawił się także problem z brakiem widoczności "bits/c++config.h" przez mojego clang-a (ponieważ korzystałem z iostream). Rozwiązaniem było dodanie dodatkowej flagi dla kompilatora:
Proces kompilacji:
# Problem ~/poligon/build/Debug+Asserts/bin/clang++ -templight main.cpp /usr/lib/gcc/i686-linux-gnu/4.7/../../../../include/c++/4.7/iostream:38:10: fatal error: 'bits/c++config.h' file not found # Fix ~/poligon/build/Debug+Asserts/bin/clang++ -I/usr/include/i386-linux-gnu/c++/4.7/ -templight main.cppKompilator wygeneruje dla nas plik xml, którym należy nakarmić jeden z programów go analizujących np. Templar (debugger). Przykład, prosty program na obliczanie silni - 5!.
template <int N> struct factorial { enum { value = N * factorial<N-1>::value }; }; template <> struct factorial<1> { enum { value = 1 }; }; template <> struct factorial<0> { enum { value = 1 }; }; int main() { factorial<5>::value; return 0; }A poniżej graf wygenerowany podczas analizy. Break na factorial<3>::value.
Brak komentarzy:
Prześlij komentarz