ここでは、Tsai Camera Calibration Software (http://www.cs.cmu.edu/afs/cs.cmu.edu/user/rgw/www/TsaiCode.html) で公開されているソースコードのコンパイルを行った際の手順を記載する。
以下のような構成での動作を想定している。異なる場合は適宜読み替えること。
Windows XP Professional
Minimalist GNU for Windows
Visual Studio 2005 Academic Edition (Minimalist GNU for Windowsがあれば不必要)
http://sourceforge.net/projects/mingw/から、必要なファイルを入手する。 "GCC"・"GNU Binutils"・"GNU Make"・"MinGW Runtime"・"MinGW API for MS-Windows"あたりをインストールすれば良いだろう。
今回導入したファイルは以下の通りである(これらすべてが必要なわけではない)。
gcc-core-4.4.0-mingw32-bin.tar.gz
gcc-c++-4.4.0-mingw32-bin.tar.gz
gmp-4.2.4-mingw32-dll.tar.gz
mpfr-2.4.1-mingw32-dll.tar.gz
pthreads-w32-2.8.0-mingw32-dll.tar.gz
binutils-2.19.1-mingw32-bin.tar.gz
make-3.81-20090914-mingw32-bin.tar.gz
mingwrt-3.16-mingw32-dev.tar.gz
w32api-3.13-mingw32-dev.tar.gz
これらすべてを同一のディレクトリに展開し環境変数を設定する。環境変数の設定については以下を参考にすると良いかもしれない。
@ echo off set GCC_EXEC_PREFIX=C:\mingw set PATH=%PATH%;%GCC_EXEC_PREFIX%\bin set PATH=%PATH%;%GCC_EXEC_PREFIX%\libexec\gcc\mingw32\4.4.0 set C_INCLUDE_PATH=%C_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\include set C_INCLUDE_PATH=%C_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0\include set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\include set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0\include set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0\include\c++ set LIBRARY_PATH=%LIBRARY_PATH%;%GCC_EXEC_PREFIX%\lib set LIBRARY_PATH=%LIBRARY_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0
Tsai Camera Calibration Software (http://www.cs.cmu.edu/afs/cs.cmu.edu/user/rgw/www/TsaiCode.html にて ソースファイル"Tsai-method-v3.0b3.tar.Z"("tsai30b3.zip")を入手し、任意の場所に展開する。 また minpack ディレクトリに含まれているファイルは展開するべきではない。一緒に展開したのであれば削除しておくこと。
C/C++ Minpack (http://devernay.free.fr/hacks/cminpack.html) にて、
"cminpack-1.0.2.tar.gz"をダウンロードし、Tsai Camera Calibration Softwareの展開先のminpackディレクトリ(空ディレクトリであること)に以下のファイルを展開する。
dpmpar_.c, enorm_.c, f2c.h, fdjac2_.c, lmdif_.c, lmpar_.c, minpack.h, qrfac_.c, qrsolv_.c
makefile.unxをmakefileにコピーし、それを修正して正常にコンパイルできるようにする。以下のようにすればよい。
#
# Makefile
#
# compiler flags: -O - optimize code for execution speed
#
CC = gcc
CLIBS = -L. -lmnpak -lm
CFLAGS = -O
CALOBS = cal_main.o ecalmain.o cal_tran.o cal_eval.o cal_util.o matrix.o
MINPACKOBS = dpmpar_.o enorm_.o fdjac2_.o lmdif_.o lmpar_.o qrfac_.o qrsolv_.o
MINPACKLIB = libmnpak.a
SRCDIR = .
#########################################
ccal: $(SRCDIR)/ccal.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/ccal.c $(CALOBS) $(CLIBS) -o ccal
ccal_fo: $(SRCDIR)/ccal_fo.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/ccal_fo.c $(CALOBS) $(CLIBS) -o ccal_fo
nccal: $(SRCDIR)/nccal.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/nccal.c $(CALOBS) $(CLIBS) -o nccal
nccal_fo: $(SRCDIR)/nccal_fo.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/nccal_fo.c $(CALOBS) $(CLIBS) -o nccal_fo
ecal: $(SRCDIR)/ecal.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/ecal.c $(CALOBS) $(CLIBS) -o ecal
xfd2xfu: $(SRCDIR)/xfd2xfu.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/xfd2xfu.c $(CALOBS) $(CLIBS) -o xfd2xfu
wc2ic: $(SRCDIR)/wc2ic.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/wc2ic.c $(CALOBS) $(CLIBS) -o wc2ic
ic2wc: $(SRCDIR)/ic2wc.c $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/ic2wc.c $(CALOBS) $(CLIBS) -o ic2wc
csyn: $(SRCDIR)/csyn.c gasdev.o $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/csyn.c gasdev.o $(CALOBS) $(CLIBS) -o csyn
ncsyn: $(SRCDIR)/ncsyn.c gasdev.o $(CALOBS) $(MINPACKLIB)
$(CC) $(CFLAGS) $(SRCDIR)/ncsyn.c gasdev.o $(CALOBS) $(CLIBS) -o ncsyn
#########################################
cal_main.o: $(SRCDIR)/cal_main.h $(SRCDIR)/cal_main.c
$(CC) $(CFLAGS) -c $(SRCDIR)/cal_main.c
ecalmain.o: $(SRCDIR)/cal_main.h $(SRCDIR)/ecalmain.c
$(CC) $(CFLAGS) -c $(SRCDIR)/ecalmain.c
cal_tran.o: $(SRCDIR)/cal_main.h $(SRCDIR)/cal_tran.c
$(CC) $(CFLAGS) -c $(SRCDIR)/cal_tran.c
cal_eval.o: $(SRCDIR)/cal_main.h $(SRCDIR)/cal_eval.c
$(CC) $(CFLAGS) -c $(SRCDIR)/cal_eval.c
cal_util.o: $(SRCDIR)/cal_main.h $(SRCDIR)/cal_util.c
$(CC) $(CFLAGS) -c $(SRCDIR)/cal_util.c
matrix.o: $(SRCDIR)/matrix/matrix.h $(SRCDIR)/matrix/matrix.c
$(CC) $(CFLAGS) -c $(SRCDIR)/matrix/matrix.c
gasdev.o: $(SRCDIR)/gasdev.c
$(CC) $(CFLAGS) -c $(SRCDIR)/gasdev.c
$(MINPACKLIB): $(SRCDIR)/minpack/f2c.h \
$(SRCDIR)/minpack/dpmpar_.c \
$(SRCDIR)/minpack/enorm_.c \
$(SRCDIR)/minpack/fdjac2_.c \
$(SRCDIR)/minpack/lmdif_.c \
$(SRCDIR)/minpack/lmpar_.c \
$(SRCDIR)/minpack/qrfac_.c \
$(SRCDIR)/minpack/qrsolv_.c
$(CC) $(CFLAGS) -c $(SRCDIR)/minpack/*.c
ar rvc $(MINPACKLIB) $(MINPACKOBS)
ranlib $(MINPACKLIB)
del $(MINPACKOBS)
#########################################
all: ccal \
ccal_fo \
nccal \
nccal_fo \
ecal \
xfd2xfu \
wc2ic \
ic2wc \
csyn \
ncsyn
clean:
del -f \
*.a \
*.o \
ccal \
ccal_fo \
nccal \
nccal_fo \
ecal \
xfd2xfu \
wc2ic \
ic2wc \
csyn \
ncsyn
lint:
lint -Imatrix -Iminpack $(SRCDIR)/*.c $(SRCDIR)/matrix/*.c $(SRCDIR)/minpack/*.c