ちっぷす:GNU Octaveのコンパイル
October 17, 2005
コンパイルできない... on Mac OS X 10.4.2/Xcode 2.1 (gcc 4.0.0,
Apple Computer, Inc. build 5026), g77 3.4.2, PowerBook G4 12 inch (1.5GHz, 1.25GB ram)
材料
FFTWがあるとないとで、FFT/DFTの計算速度が100倍くらい違うらしい。
コンパイルが面倒なときは、ここから。
手順
さきにFFTWをインストールする。これはあまり時間はかからない。
octaveはconfigureもmakeも、かなり時間がかかる。PowerPC G4 1.5GHz/1.25GB
RAMで1時間半以上かかった。
- cd fftw-3.0.1/
- ./configure --disable-fortran -enable-static --disable-shared
- make && sudo make install
- cd ../octave-2.9.3/
- ./configure -enable-static --disable-shared --disable-dl
- make
これは最後の最後で以下のエラーが出る。
/usr/bin/ld: warning multiple definitions of symbol _xerbla_
../src/liboctinterp.a(xerbla.o) definition of _xerbla_ in section (__TEXT,__text)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib(single module) definition of _xerbla_
/usr/bin/ld: Undefined symbols:
restFP
saveFP
___powidf2
collect2: ld returned 1 exit status
restFPとsaveFPには、コンパイルオプションに -lgcc を追加して対応。
configureやり直しやMakefile書き換えは大変なので、
エラーが出たところでコンパイルのコマンドライン(以下)を別のウィンドウに
Cut & Paste するのが楽。
g++ -I. -I.. -I../liboctave -I../src -I../libcruft/misc -DHAVE_CONFIG_H -Wall -W -Wshadow -g -O2 \
-L.. -o octave \
main.o balance.o besselj.o betainc.o cellfun.o chol.o colamd.o colloc.o daspk.o dasrt.o dassl.o det.o dispatch.o eig.o expm.o fft.o fft2.o fftn.o fftw_wisdom.o filter.o find.o fsolve.o gammainc.o gcd.o getgrent.o getpwent.o getrusage.o givens.o hess.o inv.o kron.o lpsolve.o lsode.o lu.o luinc.o matrix_type.o minmax.o pinv.o qr.o quad.o qz.o rand.o schur.o sort.o sparse.o spdet.o spkron.o splu.o spparms.o sqrtm.o svd.o syl.o time.o gplot.o __glpk__.o __qp__.o \
-L../liboctave -L../libcruft -L../src \
../src/liboctinterp.a ../liboctave/liboctave.a ../libcruft/libcruft.a \
-framework vecLib -lfftw3 -lreadline -lncurses -lz -lm -L/usr/local/lib/gcc/powerpc-apple-darwin6.8/3.4.2 -L/usr/local/lib/gcc/powerpc-apple-darwin6.8/3.4.2/../../.. -lz -lm -lfrtbegin -lg2c -lSystem
で、この最後の -lSystem の後に -lgccを、
スペースを空けて付ける。すると、エラーの種類が変わる。
/usr/bin/ld: /usr/local/lib/gcc/powerpc-apple-darwin6.8/3.4.2/libgcc.a(unwind-dw2.o) section's (__TEXT,__eh_frame) type S_REGULAR does not match previous objects type S_COALESCED
collect2: ld returned 1 exit status
このエラーはどうもg77が原因らしく、いまんとこお手上げ。
g77のページにあるように-lSystemStubsを付けてもダメ。
configureのときに、
--disable-dynacmi とか --disable-dl
とかしなければいいような気もする。