Мой код на Фортране должен вызывать функцию C ++ с именем SolveBIE_ (), и эта функция записана в одном файле, например, test.c. SolveBIE_ () должен вызывать некоторые другие функции C ++, написанные в других файлах, например, part01.c, part02.c. Я также требую эти функции в part01.h и part02.h. Тогда я использую
$ gcc -c part01.c
$ gcc -c part02.c
$ ar cr kf.a part01.o part02.o part01.h part02.h
чтобы получить мой KF.A. Я связываю kf.a как объектный файл в моей компиляции на Фортране. Я использую Intel Fortran Ifort и Makefile. Я получил ошибку в моей модели. Вот скрипт makefile.
FC = ifort
IFC_OPT = -O3 -ipo -unroll
FFLAGS = -extend_source -mp1 -xW -w95 -cm $(IFC_OPT) -cm
LINKFLAGS = -LFFTPACK -ldfftpack
CC = cc
HS_OBJECTS = xx.o kf.a ...\ objectfile
VEL = vel_new_massflux.o matvec.o
MAIN = xx.o new_restart.o
hsflux_objs = $(MAIN) $(VEL) $(HS_OBJECTS)
hsflux: $(hsflux_objs)
$(FC) -o hsflux $(FFLAGS) $(hsflux_objs) $(LINKFLAGS)
hsfluxd_objs = driver_massflux_debug.o $(VEL) $(HS_OBJECTS)
hsflux_debug: $(hsfluxd_objs)
$(FC) -o hsflux_debug $(FFLAGS) $(hsfluxd_objs) $(LINKFLAGS)
$(FC) $(FFLAGS) -o testfft2 testfft2.o FAST.o xfft.o $(LINKFLAGS)
.f.o:
$(FC) -c $(FFLAGS) $*.f
.c.o:
$(CC) -c $*.c
clean:
/bin/rm -f *.o *~
VISCFING_FILES=Makefile *.f *.F *.c *.h FFTPACK Scripts PARAMS
Ошибка
ipo: warning #11021: unresolved SolverBIE_
Referenced in /tmp/ipo_ifortUqyTSb.o
/tmp/ipo_ifortUqyTSb.o: In function 'MAIN_':
ipo_out.f:(.text+0x5442): undefined reference to 'SolveBIE_'
Подробности кода на C ++ и кода на Фортране здесь, еще один вопрос, который я задал, похоже, проблема решена. Но мне нужно завершить компиляцию, чтобы убедиться.
C ++ код и фортран код
Возвращаясь к вашему связанный код, Фортран имеет
integer (C_INT) function SolveBIE_(x, y, aa, m) BIND(C, NAME='SolveBIE_')
В то время как С имеет
int solveBIE_(double *ini_bdry_x, double *ini_bdry_y, double *ini_bdry_um, int *fM)
Таким образом, часть Фортрана ищет символ под названием SolveBIE_
в то время как часть C предоставляет символ под названием solveBIE_
, Разница в случае каждого персонажа имеет значение!
Других решений пока нет …