Fortran Coder

标题: C++ Fortran混合编程问题 [打印本页]

作者: xuhang578    时间: 2018-1-20 13:26
标题: C++ Fortran混合编程问题
   我想将C++和Fortron混合编程(主要是C++调用Fortran)的代码包编译成一个dll,文件结构如下            ampcormodule.cpp
            ampcormodule.h
            ampcor.F
            ampcorAllocateDeallocate.F


   已经成功用WinGW配的gfortran和g++分别将.cpp和.F文件做成了.o文件
   接下来将他们编译成dll,  命令行语句为:gfortran ampcor.o -shared -fPIC -o ampcor5.dll    这时候出现问题:无论是单独编译.cpp文件对应的.o文件( ampcormodule.o),还是编译.F文件对应的.o文件( ampcor.o),都会报类似如下的错:

   \Local\Temp\ccy2IZmN.o:ampcorGetState.f:(.text+0x40): undefined reference to `__ampcorstate_MOD_i_centerxiarr
   \Local\Temp\ccy2IZmN.o:ampcorGetState.f:(.text+0x96): undefined reference to `__ampcorstate_MOD_r_shftxoscarr

  ampcormodule.o:ampcormodule.cpp:(.text+0x1889): undefined reference to `getCov3_f'
  ampcormodule.cpp:(.text+0x1433): undefined reference to `getSNR_f'




  ps:编译器本身问题应该不大,因为我用简单的helloWorld代码做测试,能成功运行
       网上查了好久,这个问题大致可以总结为:1、32位和64位对不上   2、找不到对应的库文件
       我猜我的情况可能是找不到对应的库文件,但具体怎么改我不完全没有头绪,纠结了好久,请各位大佬帮帮忙!



作者: vvt    时间: 2018-1-20 14:24
把所有 o 文件放一起
类似
gfortran ampcor.o ampcormodule.o ampcorAllocateDeallocate.o ampcorGetState.o -shared -fPIC -o ampcor5.dll
作者: xuhang578    时间: 2018-1-20 15:27
vvt 发表于 2018-1-20 14:24
把所有 o 文件放一起
类似
gfortran ampcor.o ampcormodule.o ampcorAllocateDeallocate.o ampcorGetState. ...

您好,放在一起我试过,能一定程度解决问题,但是还是cpp那个文件还是会有东西找不到
结果报这样的的错:
  \Local\Temp\ccy2IZmN.o:ampcorGetState.f:(.text+0x40): undefined reference to `__ampcorstate_MOD_i_centerxiarr
   \Local\Temp\ccy2IZmN.o:ampcorGetState.f:(.text+0x96): undefined reference to `__ampcorstate_MOD_r_shftxoscarr
.
.
.

帖子里好像不能放图。请问我可以联系您向您请教关于C++和fortran混编的这个问题吗?
作者: vvt    时间: 2018-1-20 20:20
可以放图,用附件上传即可。

找到 ampcorstate 模块中的 i_centerxiarr 和 r_shftxoscarr,并且让编译器也找到。
你大概是没有包含 ampcorstate.o 文件。

你可以加入本论坛QQ群2338021,也可以在论坛继续跟帖。

作者: xuhang578    时间: 2018-1-24 09:42
vvt 发表于 2018-1-20 20:20
可以放图,用附件上传即可。

找到 ampcorstate 模块中的 i_centerxiarr 和 r_shftxoscarr,并且让编译器也 ...

嗯嗯,确实是少加了ampcorstate.o文件,抱歉没有看帖子,谢谢前辈!




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2