AUTO を 自作プログラム(c++)で使う(やめた.)
中途:とりあえず,AUTO の関数を使った c++ プログラムをコンパイルできるようになるまで.
$(AUTO_DIR)/include/auto_f2c.h を編集.
/* user function pointers */ int func(); int stpnt(); int bcnd(); int icnd(); int fopt(); int pvls();
を,
int func(integer, const doublereal*, const integer*, const doublereal*, integer, doublereal*, doublereal*, doublereal*); int stpnt(integer, doublereal, doublereal*, doublereal*); int bcnd(integer, const doublereal*, const integer*, integer, const doublereal*, const doublereal*, integer, doublereal*, doublereal*); int icnd(integer, const doublereal*, const integer*, integer, const doublereal*, const doublereal*, const doublereal*, const doublereal*, integer, doublereal*, doublereal*); int fopt(integer, const doublereal*, const integer*, const doublereal*, integer, doublereal*, doublereal*, doublereal*); int pvls(integer, const void*, doublereal*);
$(AUTO_DIR)/include/auto_c.h を編集.
先頭に
#ifdef __cplusplus extern "C" { #endif
最後尾に
#ifdef __cplusplus } #endif
をそれぞれ加える.
自作プログラム中に,main 関数を作りたいので,
$(AUTO_DIR)/lib/main.o を読み込まないようにする.$(AUTO_DIR)/lib 以下の他の .o は読み込む.
Makefile.am
bin_PROGRAMS = xevious
myPROG = $(HOME)/prog
INCLUDES = -I$(myPROG) -I$(myPROG)/xevious/src -I$(AUTO_DIR)/include
xevious_SOURCES = Xevious.cpp
ALD = $(AUTO_DIR)/lib
AOBJ = $(ALD)/autlib*.o $(ALD)/conpar.o $(ALD)/dmatrix.o $(ALD)/eispack.o $(ALD)/reduce.o $(ALD)/setubv.o $(ALD)/worker.o
xevious_LDFLAGS = -framework vecLib $(AOBJ) -L$(AUTO_DIR)/lib
LIBS= -lauto_f2c -lm
main 文を含む自作ファイルは,以下を満たすように作成.
#include <auto_f2c.h> #include <auto_c.h> FILE *fp3; FILE *fp7; FILE *fp9; FILE *fp12; int global_conpar_type=CONPAR_DEFAULT; int global_setubv_type=SETUBV_DEFAULT; int global_reduce_type=REDUCE_DEFAULT; int global_num_procs=1; int global_verbose_flag=0;
を付け加える.
関数 func, stpnt, bcnd, icnd, を定義.(ダミーでよい.)
注! 引数に注意!
int pvls(integer ndim, const double *u, doublereal *par){
return 0;
}
では,コンパイルできず.次のように, void* にする.
int pvls(integer ndim, const void *u, doublereal *par) {
return 0;
}