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;
}