找回密码
 注册
Simdroid-非首页
查看: 315|回复: 18

[子程序] fortran连接时出现 error LNK2001: unresolved external symbol _MAIN_【已解决】

[复制链接]
发表于 2011-6-25 20:25:45 | 显示全部楼层 |阅读模式 来自 韩国
本帖最后由 JingheSu 于 2011-7-4 14:02 编辑

我在document中找了一个子程序的例子,其中子程序要用Fortran先处理。子程序可以编译,但是连接时总是出现
Linking...
dfor.lib(DFORMAIN.OBJ) : error LNK2001: unresolved external symbol _MAIN__
Debug/QW.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
QW.exe - 2 error(s), 0 warning(s)
请各位大侠帮帮忙哈。这到底得怎么改呀。我用的是compaq Visual Fortran 6.6,另外用Intel(R) Fortran Compiler 11.0.061也是出现同样的错误。谢谢大侠呀!

下面是crackplate_ls3s.inp文件(在document的实例手册中1.4.1)
*HEADING
QUARTER MODEL OF LARGE PLATE WITH CENTER SURFACE
CRACK [S8R]
*NODE
1,0.,0.
97,12.,0.
4801,0.,12.
4897,12.,12.
*NGEN,NSET=ONY
1,4801,100
*NGEN,NSET=FREE
97,4897,100
*NGEN
1,97
101,197
201,297
401,497
601,697
1001,1097
1401,1497,2
2201,2297,2
3001,3097,2
3901,3997,2
4801,4897,2
*NSET,NSET=ONX
27,29,33,37,41,45,49,53,57
61,69,77,87,97
*ELEMENT,TYPE=LS3S,ELSET=LS
1,25,24,23
5,17,15,13
*ELGEN,ELSET=LS
1,4,-2,1
5,4,-4,1
*ELEMENT,TYPE=S8R,ELSET=SHELL
9,1,5,205,201,3,105,203,101
13,17,19,219,217,18,119,218,117
17,25,29,229,225,27,129,227,125
18,29,37,237,229,33,137,233,129
22,61,77,277,261,69,177,269,161
23,77,97,297,277,87,197,287,177
24,201,209,609,601,205,409,605,401
26,601,609,1409,1401,605,1009,1405,1001
28,217,221,621,617,219,421,619,417
31,617,621,1421,1417,619,1021,1419,1017
34,229,237,637,629,233,437,633,429
38,629,637,1437,1429,633,1037,1433,1029
42,261,277,677,661,269,477,669,461
43,661,677,1477,1461,669,1077,1469,1061
44,277,297,697,677,287,497,687,477
45,677,697,1497,1477,687,1097,1487,1077
46,1401,1417,3017,3001,1409,2217,3009,2201
48,1417,1421,3021,3017,1419,2221,3019,2217
50,1421,1429,3029,3021,1425,2229,3025,2221
58,1477,1497,3097,3077,1487,2297,3087,2277
47,3001,3017,4817,4801,3009,3917,4809,3901
49,3017,3021,4821,4817,3019,3921,4819,3917
51,3021,3029,4829,4821,3025,3929,4825,3921
59,3077,3097,4897,4877,3087,3997,4887,3977
*ELGEN,ELSET=SHELL
9,4,4,1
13,4,2,1
18,4,8,1
24,2,8,1
26,2,8,1
28,3,4,1
31,3,4,1
34,4,8,1
38,4,8,1
46,2,28,6
52,3,16,2
47,2,28,6
53,3,16,2
*ELSET,ELSET=PRINT
9,59,15,16,17
*MATERIAL,NAME=A1
*ELASTIC
30.E6,.3
*SHELL SECTION,ELSET=SHELL,MATERIAL=A1
3.0,3
*SHELL SECTION,ELSET=LS,MATERIAL=A1
3.0,
*SURFACE FLAW,SIDE=POSITIVE,INPUT=CRACK.FLW
**     DATA GENERATED FROM PROGRAM
**     crackplate_surfaceflaw.f
*ELSET,ELSET=TOPL
47,49,51,53,55,57,59
*MPC
QUADRATIC,203,201,205,209
QUADRATIC,207,201,205,209
QUADRATIC,211,209,213,217
QUADRATIC,215,209,213,217
QUADRATIC,218,217,219,221
QUADRATIC,220,217,219,221
QUADRATIC,222,221,223,225
QUADRATIC,224,221,223,225
QUADRATIC,1405,1401,1409,1417
QUADRATIC,1413,1401,1409,1417
QUADRATIC,1423,1421,1425,1429
QUADRATIC,1427,1421,1425,1429
QUADRATIC,1433,1429,1437,1445
QUADRATIC,1441,1429,1437,1445
QUADRATIC,1449,1445,1453,1461
QUADRATIC,1457,1445,1453,1461
*BOUNDARY
ONY,1
ONY,5,6
ONX,2
ONX,4
ONX,6
1,3
*RESTART,WRITE,FREQUENCY=999
*STEP
*STATIC
0.1,1.0
*CLOAD
4801,2,100.
4809,2,400.
4817,2,125.
4819,2,100.
4821,2,75.
4825,2,200.
4829,2,150.
4837,2,400.
4845,2,200.
4853,2,400.
4861,2,200.
4869,2,400.
4877,2,225.
4887,2,500.
4897,2,125.
*EL PRINT,ELSET=LS
JK,
S,
*EL PRINT,ELSET=PRINT
COORD,
S,
E,
*EL FILE,ELSET=LS
JK,
S,
*EL FILE,ELSET=PRINT
COORD,
S,
E,
*NODE PRINT
U,
*NODE FILE
U,
*END STEP

下面是crackplate_surfaceflaw.f文件(也是实例手册中的)
CC--- PROGRAM TO GENERATE CRACK DEPTH DATA
C     ROGRAM CRACK
C
      SUBROUTINE ABQMAIN
C
      IMPLICIT REAL*8(A-H,O-Z)
      OPEN(UNIT=16,STATUS='NEW',ACCESS='SEQUENTIAL',
     1     FORM='FORMATTED',FILE='CRACK.FLW')
      C=3.
      CC=C*C
      N=24
      NNODE=N+1
      X0=C/DBLE(N)
      X=0.
      DO 100 I=1,NNODE
      IF(I.GE.17) GO TO 1
      IF((I/2)*2.EQ.I) GO TO 10
    1 CONTINUE
      XX=X*X
      TMP=.2
      Z=TMP*SQRT(CC-XX)
      WRITE(6,99) I,Z
      WRITE(16,99)I,Z
   99 FORMAT(I5,', ',F10.7)
   10 CONTINUE
      X=X+X0
  100 CONTINUE
      REWIND 16
      STOP
      END

FORTRAN 编辑出错提示是
Linking...
dfor.lib(DFORMAIN.OBJ) : error LNK2001: unresolved external symbol _MAIN__
Debug/QW.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
QW.exe - 2 error(s), 0 warning(s)
 楼主| 发表于 2011-6-25 22:03:06 | 显示全部楼层 来自 韩国
Simdroid开发平台
我知道我为什么出错了,是没有主程序。我加了主程序,生成了crack.flw文件,然后运行了abaqus的crackplate_ls3s.inp文件,程序也成功执行了。可是为什么我的crack.flw文件里还是没有abaqus运算的结果呢? 大侠们帮帮我哈,谢谢
回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-27 13:47:58 | 显示全部楼层 来自 韩国
怎么没有人回复呀!是不是还得编辑一个主程序与子程序相对应才行呀?大侠们快帮帮我哈!
回复 不支持

使用道具 举报

发表于 2011-6-28 16:45:14 | 显示全部楼层 来自 四川绵阳
是的呀,你还没有接口呢
回复 不支持

使用道具 举报

发表于 2011-6-28 17:21:02 | 显示全部楼层 来自 四川绵阳
3# sheng158
就是要写一个接口程序,每个子程序不一样,你查一下
回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-28 22:01:11 | 显示全部楼层 来自 韩国
谢谢你哈,我去去查,但这个程序得怎么写我还不清楚,希望大侠能帮帮我哈。
回复 不支持

使用道具 举报

发表于 2011-6-29 08:44:34 | 显示全部楼层 来自 广东深圳
和主程序没有关系,应该是fortran、mvs同abaqus的环境变量没有设置好;或者是fortran、mvs同abaqus不匹配。

一、fortran、mvs同abaqus的环境变量没有设置好
如何检查(这个是针对不同的系统,32位还是64位)
1. 查看ifortvar.bat文件,里面是否有一行 @call “。。。”这行是MVS内容?
有的话,说明IVF和MVS环境变量是对应的;
没有的话,建议重新安装fortran,这样可以避免针对不同系统寻找MVS的路径;
2. 查看abaqus6**.bat,看是否设置了@call 调用了ifortvar.bat?

二、fortran、mvs同abaqus不匹配
这样可以查看www.simulia.com网站查看或者看document的license install and guide(具体名字不记得 )这本书。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-29 14:15:24 | 显示全部楼层 来自 韩国
7# wei1012

谢谢你哈。我查看了,我的那两个文件的环境变量的设置没有问题。而且我的abaqus也运行了其它的子程序,如subroutine creep等子程序都可以运行。

再次谢谢你哈。应该是像lxj502 说的那样要写一个接口程序!但我还不知道怎么写
回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-29 15:57:10 | 显示全部楼层 来自 韩国
5# lxj502

我查了下接口单元应该是8,但还是没整明天怎么编这个接口程序,继续奋斗下
回复 不支持

使用道具 举报

发表于 2011-6-29 18:56:22 | 显示全部楼层 来自 德国
支持一下
我也有类似的问题,你比我研究的深入很多了
我还不明白为什么要用到主程序吖? 一般情况abaqus不是直接链接子程序的吗?只要把传递的变量定义好就可了阿。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-30 13:52:08 | 显示全部楼层 来自 韩国
本帖最后由 sheng158 于 2011-7-2 21:12 编辑

10# ida
因为这里要先用fortran运行那个子程序产生.flw文件,然后才能用abaqus运行.inp文件。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-30 17:07:08 | 显示全部楼层 来自 韩国
11# sheng158
发现也不需要編主程序,只要直接用命令在abaqus上运行abaqus make job=文件.for就可以运行连接产生.flw文件了,可是运行inp文件后。.flw里的文件还是没有想要的数据结果,晕哈
回复 不支持

使用道具 举报

发表于 2011-7-1 09:29:03 | 显示全部楼层 来自 四川绵阳
你有没有写include 'aba_param.inc'
回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-2 21:11:06 | 显示全部楼层 来自 韩国
13# lxj502
谢谢你哈。
问题解决了,运行这个子程序可以有两种方法,一个是用fortran编个简单的主程序来配合subtroutine abamain子程序运行产生.flw文件。另一个是直接在abaqus命令中运行命令:abaqus make job=jobname.for (.for可以省略),然后再运行abaqus jobname就会产生.flw。然后点.flw就会产生一个数据文件。
建议用第二种方法,简单,方便

都怪自己当时搞晕了,把另外一个例子和这个例子混在一起了,真是服了自己了。嗨!

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-2 21:12:52 | 显示全部楼层 来自 韩国
我恨我自己哈
回复 不支持

使用道具 举报

发表于 2011-7-2 21:41:49 | 显示全部楼层 来自 江苏
给你加分安慰一下,哈哈
回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-4 13:52:57 | 显示全部楼层 来自 韩国
16# JingheSu
谢谢版主哈
回复 不支持

使用道具 举报

发表于 2015-10-12 15:20:08 | 显示全部楼层 来自 陕西西安
正在学习中,看了之后有收获
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-21 21:27 , Processed in 0.057168 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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