неопределенная ссылка на SolveBIE_ при связывании C ++ и Fortran

Мой код на Фортране должен вызывать функцию 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 ++ код и фортран код

0

Решение

Возвращаясь к вашему связанный код, Фортран имеет

  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_, Разница в случае каждого персонажа имеет значение!

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]