linux module 目录,科学网—Linux下 Fortran 90 不同目录的modules和主程序的编译链接 - 周锋的博文...

昨天在Linux下编译fortran90的modules的时候出现问题,比如我在main目录下有mod和src两个目录,mod目录下test1.f90 这个module,src目录下有test2.f90这个module,当然多个modules也类似(下面的过程就需要写makefile来实现,更方便快捷),src有个test_src目录,里面有test.f90主程序,正确编译链接除了要加 use xx (xx是module名)。刚开始我的编译链接流程是这样的:

1. 进入mod目录: ifort -free -c test1.f90,ar rv libtest1.a test1.o

2. 进入src目录:ifort -free -I../mod/ -c test2.f90,ar rv libtest2.a test2.o (test2要用到test1 module)

前两步除了生成库文件,object文件(.o),还会生成 .mod文件。

3. 进入test_src目录:ifort -free test_src.f90 -I../ -I../../mod/ -o test_src (-I带相对路径是指定 .mod所在目录)

这样的编译结果提示 "undefined reference to......"

网上的解决方案有个是把.mod拷贝到和主程序一个目录,其实和我的做法是一样的,就是确定好路径而已。

当用ifort -free test_src.f90 ../libtest2.a ../../mod/libtest1.a -o test_src,提示  "Error in opening the compiled

module file, check INCLUDE paths"

最后的解决方案是:ifort -free test_src.f90  ../libtest2.a ../../mod/libtest1.a  -I../  -I../../mod/ -o test_src,既要指定.mod所在的目录,又要指定对应的静态库,刚开始理解上有个误区,以为有了.mod就不用静态库了,其实不然,mod目录下的modules还要生成静态库,而且主程序链接生成可执行模块的时候还需要这个静态库。

NOTE: -I../  -I../../mod/ 这两个的顺序可以互换,但是  ../libtest2.a ../../mod/libtest1.a不能互换,否则出错,因为libtest2.a依赖于libtest1.a。

转载本文请联系原作者获取授权,同时请注明本文来自周锋科学网博客。

链接地址:http://blog.sciencenet.cn/blog-350278-731906.html

上一篇:Python版Rinex观测数据、精密轨道数据下载包PyRnxOrb

下一篇:RINEX3转换成RINEX2文件(已更新下载地址)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值