LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 583|回复: 0

make时的一个问题

[复制链接]
发表于 2005-1-22 21:37:28 | 显示全部楼层 |阅读模式
从网上找了例子,想从IDL中实现调用Fortran(subalign.f)的功能
调用过程需要用到一个C函数align.c.这两个源文件在下面.
1.首先编译这两个源文件;
2.然后创建共享库;
3.IDL调用(略去)

1.Makefile文件如下
    subalign.so : align.o subalign.o
    subalign.o : subalign.f
         f77 -o32 -c subalign.f -lm -lc
    align.o : align.c
         cc -o32 -c align.c
    clean:
         rm -f *.o align subalign so_locations *.so
但make时出现问题
cc -o32 -c align.c
f77 -o32 -c subalign.f -lm -lc
f77: -lfrtbegin: linker input file unused because linking not done
f77: -lg2c: linker input file unused because linking not done
f77: -lm: linker input file unused because linking not done
f77: -lc: linker input file unused because linking not done

刚刚开始接触make
不知道该怎么解决上述问题??
多谢

2. Create shared libraries
cc -o32 -shared -all subalign.o align.o -o subalign.so

---------------------------------------------------------------------
FORTRAN子过程subalign.f
      SUBROUTINE subalign(XP, Y1, Y2, Y3, Y4, Y5, JMAX, EX, DEX)
      DIMENSION Y1(JMAX),Y2(JMAX),Y3(JMAX),Y4(JMAX),Y5(JMAX),XP(JMAX)
      DO 15 J=1,JMAX
      X1=EX
      X2=EX/2.
      X3=EX/3.
      X4=EX/4.
      X5=EX/5.
      Y1(J)=X1*(2.+X1)/(1.+X1)**2
      Y2(J)=X2*(2.+X2)/(1.+X2)**2
      Y3(J)=X3*(2.+X3)/(1.+X3)**2
      Y4(J)=X4*(2.+X4)/(1.+X4)**2
      Y5(J)=X5*(2.+X5)/(1.+X5)**2
      XP(J)=EX
15   EX=EX+DEX
      RETURN
      END
---------------------------------------------------------------------
C函数align.c
    #include <stdio.h>

    void subalign(int argc, void *argv[])
    {
     extern void subalign_(); /* Fortran routine */
     float *xp, *y1, *y2, *y3, *y4, *y5, *ex, *dex;
     int *jmax;

     xp = (float *) argv[0]; /* Array pointer */
     y1 = (float *) argv[1]; /* Array pointer */
     y2 = (float *) argv[2]; /* Array pointer */
     y3 = (float *) argv[3]; /* Array pointer */
     y4 = (float *) argv[4]; /* Array pointer */
     y5 = (float *) argv[5]; /* Array pointer */

     /* Do the calculations in Fortran */
     subalign_(xp, y1, y2, y3, y4, y5, jmax, ex, dex);
    }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表