【发布时间】:2018-02-08 23:47:55
【问题描述】:
我的 Fortran 代码需要调用名为 SolveBIE_() 的 C++ 函数,该函数写在一个文件中,例如测试.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。我在我的 fortran 编译中将 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++代码和Fortran代码的细节在这里,我又问了一个问题,看来问题解决了。但我需要完成编译以确保。 C++ code and fortran code
【问题讨论】:
-
你看过这个QA吗? stackoverflow.com/questions/17845931/…
-
另外,如果
SolveBIE__函数位于名为test.c的文件中,那么它可能不是 C++,而只是 C。导出 C++ 代码(例如成员函数)并从 C++ 外部调用它们比 C 函数(名称修饰、vtables 等)更难。 -
感谢您的评论。该页面几乎没有用。我还没有看到问题的解决方案。
标签: c++ intel-fortran