【问题标题】:Compiling and linking in separate steps在单独的步骤中编译和链接
【发布时间】:2013-10-08 05:49:16
【问题描述】:

我有一个使用一些数学库的 Fortran 文件 my.f90。包含文件和库文件的两个标志在 .csh 文件中定义

INC_FLAG = "-I$MATH_DIR/include/LIB_ARCH"
LINK_FLAG= "-L$MATH_DIR/lib/lib$LIB.ARCH -Bdynamic -limsl -limslblas"

在终端中这工作得很好

gfortran -o my.o $INC_FLAG my.f90 $LINK_FLAG

但是当我尝试在分隔步骤中进行编译和链接时,我无法做到。这失败了

gfortran -c $INC_FLAG my.f90
gfortran -o my.o $LINK_FLAG

我需要分别进行编译和链接,因为我将有许多源文件(.f90)并且需要制作一个编译和链接分别完成的makefile。我的 makefile 也不起作用

 all: my.o
        gfortran -o my.o $(LINK_F90)
 my.o: my.f90
        gfortran $(F90FLAGS) -c my.f90 $<   
 clean: 
        rm my.o

这是怎么回事?

【问题讨论】:

  • 不要担心让单独的步骤与 Make 一起工作,直到你可以让它们在没有 Make 的情况下工作。

标签: compilation linker makefile fortran fortran90


【解决方案1】:

gfortran -c $INC_FLAG my.f90 将编译对象my.o。选项-o 指定输出文件的名称 - 因为这又是my.o(在你的情况下),这必须失败!

试试gfortran -o APPLICATIONNAME my.o $LINK_FLAG

Makefile 也是如此。

【讨论】:

  • 我试过gfortran -o plz_work my.o $LINK_FLAGgfortran -o plz_work.o my.o $LINK_FLAG,编译器说IPO链接:找不到“(”gfortran:错误:多文件优化编译时出现问题(代码1)
  • 使用gfortran -o plz_work my.o,生成的文件将是可执行文件...你的$LINK_FLAGs 是什么?
  • 我帖子的第三行将LINK_FLAG 定义为库文件的位置。 gfortran -o plz_work my.o 给出与使用 gfortran -o plz_work my.o $LINK_FLAG 相同的错误。这一定意味着链接器无法链接到源库。链接到库文件的适当语法是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多