最近要寫ICA(Independent Component Analysis)的程式,想直接call library來實做,找上了IT++這套函式庫。不過因為我不想在Linux上寫,又不想要用Visual Studio,所以Build的過程花了一些時間,大多數的參考資料都只有給Linux或是VC的,我試了一天才把整個環境弄好,在此紀錄一下過程。
首先要準備的檔案:
1. MinGW
2. Msys (我不想用Cygwin,還是Msys比較小巧簡單)
3. fftw-3.2 (itpp requirement, fast fourier transform)
4. lapack-3.1.1 (itpp requirement)
5. itpp-4.0.6
(3~5的檔案也可到我的網頁上直接抓:itpp)
A. MinGW & Msys & Extract
首先安裝MinGW和Msys,這個照MinGW網頁上的做就好了。(安裝完Msys記得設定一下MinGW的路徑)
然後把3~5三個檔案都解壓縮到c:/底下。
B. fftw
a. 啟動Msys,執行以下指令:
$ cd /c/fftw-3.2
$ ./configure
$ make
$ make install
b. 將c:/fftw-3.2/.lib/的 libfftw3.a和 libfftw3.la 移動到 c:/MinGW/lib/
c. 將c:/fftw-3.2/的fftw3.pc移動到c:/MinGW/lib/pkgconfig/
d. 編輯fftw3.pc,把”prefix=/usr/local” 改成 “prefix=/c/MinGW”
e. 將c:/fftw-3.2/api/的header file:fftw3.h ,fftw3.f 移動到 /c/MinGW/include/
C. BLAS & LAPACK
a. 將c:/lapack-3.1.1/的make.inc.example檔名改為make.inc,內容不需更動
b. 啟動Msys,執行以下指令:
$ cd /c/lapack-3.1.1
$ make blaslib
$ make lapacklib
c. 將c:/lapack-3.1.1/的blas_LINUX.a及lapack_LINUX.a移動到 c:/MinGW/lib/,並把檔名分別改為libblas.a及liblapack.a
D. IT++
a. 啟動Msys,執行以下指令:
$ cd /c/itpp-4.0.6
$ ./configure
(如果有找不到BLAS或LAPACK的情形,試著改用:
$ ./configure LDFLAGS=”-L/c/mingw/lib/libblas.a” CPPFLAGS=”-I/c/mingw/include” –with-blas=”-lblas” –with-lapack=”-llapack” –with-fft=”-lfftw3″)
$ make && make install
$ make check (檢查看看是不是函式Test都通過)
b. 把c:/itpp-4.0.6/itpp資料夾複製到c:/MinGW/include/下
c. 用搜尋功能找到在c:/itpp-4.0.6/itpp/下每一個子資料夾中的lib file,並複製到c:/MinGW/lib/ (總共應該有libitpp.a, libalgebra.a, libbase.a, libbessel.a, libcomm.a, libfixed.a, libmath.a, liboptim.a, libprotocol.a, libsignal.a, libsrcode.a, libstat.a)
d. 把c:/itpp-4.0.6/itpp.pc複製到c:/MinGW/lib/pkgconfig/,將其中的”prefix=/usr/local” 改成 “prefix=/c/MinGW”
e. Try an example code
$ g++ test.cpp -o test -litpp -llapack -lblas -lfrtbegin -lg2c -lmingw32 -lmoldname -lmingwex -luser32 -lkernel32 -ladvapi32 -lshell32 -lmsvcrt
$ ./test
f. It should work.
參考資料:
http://itpp.sourceforge.net/current/installation.html#requirements
http://sourceforge.net/forum/?group_id=37044
http://mypaper.pchome.com.tw/news/sram190/3/1311011406/20081103230324/