| 查看: 1465 | 回复: 10 | ||
小强V587木虫 (正式写手)
|
[求助]
makefile运算两个错误,敬请大神救助,急急急
|
|
|
我是研一做模拟的,物理化学方向,拿到一个计算代码,研究makefile已经一个多月了,现在make以后出现了两个错误。makefile大概是输入一个势能面代码,经过运算输出一个可执行的、名字为 势能面.x.opt 的可执行文件,平台是intel的X86_64。现在有两个错误,请大神解读。下边是shell的部分运算过程:测试的是HN2的一个势能面,正确计算的话会生成ANT-HN2.x.opt的可执行文件,可现在并没有生成。最近两个星期了一点进展也没有,急死了。 ifort atomdata.o param.o c_traj.o c_struct.o c_term.o c_initial.o c_sys.o c_output.o c_dd.o angmom.o ant.o actionint.o actionint_nt.o adjtemp.o adjpress.o adtod.o arcom.o atomdiatom.o bmat.o brent.o bsstep.o carttojac.o checkfrus.o checkhop.o cnsvangmom.o comgen.o decocheck.o derivs.o diamin.o diapot.o driver.o driverim.o detmtbt.o elecdeco.o erotc.o ewkb.o fileopen.o finalstate.o frag.o fragcom.o func.o gaussq.o geom_opt.o getdvec2.o getdvec.o getgrad.o getgrad2.o getpem.o getrho.o getrhocsdm.o gettemp.o getpress.o gepol_mod.o gepol_unmod.o setupvolume.o volume_interface.o hardwall.o header.o hop.o honey.o ifsame.o ifsame2.o initelec.o initmol.o initrot.o inittrans.o intcart.o intcoord.o integhop.o invmtbt.o lindemann.o liouville.o matprint.o mmid.o momigen.o noang.o nocompp.o normod.o normod-trapz.o period.o periodimage.o pjctmomen.o pjsplit.o popmod.o popnorm.o preatomdiatom.o premol.o pzextr.o radialdist.o ranclucub.o ranclusp.o rancluns.o ranmolcub.o ranrot.o rantherm.o readin.o relenerg.o rijmatr.o rminfrag.o rk4.o rng_int.o rotprin.o rottran.o rtox.o stodeco.o takestep.o takestep2.o trapz.o turn.o turnpt.o utility.o verlet.o vwkb.o xptoy.o gen_prt.o HN2.o -mkl -O3 -L../../sprng2.0/lib /opt/intel/mkl/10.1.1.019/lib/64/libmkl_intel_ilp64.a /opt/intel/mkl/10.1.1.019/lib/64/libmkl_intel_thread.a /opt/intel/mkl/10.1.1.019/lib/64/libmkl_core.a -Wl,R/opt/intel/mkl/10.1.1.019/lib/64/libmkl_intel_ilp64.a -Wl,R/opt/intel/mkl/10.1.1.019/lib/64/libmkl_intel_thread.a -Wl,R/opt/intel/mkl/10.1.1.019/lib/64/libmkl_core.a ../../sprng2.0/lib/libsprng.a -o ../../exe/ANT-HN2.x.opt ifort: command line error: invalid argument for option '-m' make[1]: *** [../../exe/ANT-HN2.x.opt] Error 1 make[1]: Leaving directory `/home/cast/user/lyq/ANT16/src/obj_opt' make: *** [yes_opt] Error 2 之前的编译过程,都是没问题的。错误1的选项“-m”是代码里的参数吗 ,但是我几乎打开过所有的代码,makedile里都没找到M相关的参数; 错误2是makefile提到的, OBJ = $(patsubst %.f,%.o,$(SRC)) OBJ := $(patsubst %.F,%.o,$(OBJ)) OBJ := $(patsubst %.F90,%.o,$(OBJ)) OBJ := $(patsubst %.for,%.o,$(OBJ)) OBJ := $(patsubst %.f90,%.o,$(OBJ)) EXEDIR:=../$(EXEDIR) MAKEOPT = -f ../Makefile all: yes_opt no_opt: $(MAKE) $(MAKEOPT) -C obj targ yes_opt: $(MAKE) $(MAKEOPT) -C obj_opt EXESUFFIX=.opt OPT="$(OPT_FFLAGS)" targ targ: $(TARG) 不知道怎么错了,也不知道这几句到底什么意思。敬请大神不吝赐教。金币不多,请见谅 |
» 猜你喜欢
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有211人回复
石墨烯转移--二氧化硅衬底石墨烯
已经有0人回复
笼目材料中量子自旋液体基态的证据
已经有0人回复
数学教学论硕士可以读数学物理博士吗?
已经有0人回复
德国亥姆霍兹Hereon中心汉堡分部招镁合金腐蚀裂变SCC课题方向2026公派博士生
已经有4人回复
澳门大学 应用物理及材料工程研究院 潘晖教授课题组诚招博士后
已经有11人回复
求助NH4V4O10晶体的CIF文件
已经有0人回复
英国全奖博士招聘-深度学习与量子物理
已经有0人回复
间接带隙半导体有效质量求助
已经有0人回复
» 本主题相关价值贴推荐,对您同样有帮助:
openmx 并行运算出问题
已经有1人回复
『转』fluent14.5编译udf时报错的一种方法
已经有1人回复
Ubuntu下安装lammps单机版(no MPI,no FFT)几点心得
已经有5人回复
【求助】运算fortran的问题,怀疑是不是MPI communication的时候出现问题
已经有9人回复
VASP在自己工作站上计算的结果与在学校计算的结果有差异?怎么引起的呢?
已经有11人回复
【活动and资源】vasp的警告、报错信息及解决办法 -- 欢迎大家补充
已经有25人回复

小强V587
木虫 (正式写手)
- 应助: 5 (幼儿园)
- 金币: 1519.3
- 散金: 30
- 帖子: 411
- 在线: 87.3小时
- 虫号: 3138267
- 注册: 2014-04-15
- 性别: GG
- 专业: 光学

4楼2016-05-25 21:27:55
lijf517
木虫 (小有名气)
- 应助: 39 (小学生)
- 金币: 3391.9
- 红花: 14
- 帖子: 293
- 在线: 390.9小时
- 虫号: 2249203
- 注册: 2013-01-18
- 性别: GG
- 专业: 力学
|
你那个ifort的命令的含义是链接自己程序生成的一堆.o格式的目标文件,同时链接一些库文件,最终生成可执行文件。那个命令里使用-mkl来链接mkl库,但是这个格式好像不对。ifort会读取-这个符号后的第一个字母,得到-m这一链接选项,但是ifort编译器里没有-m选项,所以出错了。链接mkl库应该用如下格式: -L$MKL_LIB_PATH -lmkl_core…等。你可以再详细了解下链接mkl库该如何操作 发自小木虫Android客户端 |
» 本帖已获得的红花(最新10朵)
2楼2016-05-25 04:08:29
小强V587
木虫 (正式写手)
- 应助: 5 (幼儿园)
- 金币: 1519.3
- 散金: 30
- 帖子: 411
- 在线: 87.3小时
- 虫号: 3138267
- 注册: 2014-04-15
- 性别: GG
- 专业: 光学
送红花一朵 |
谢谢你的回复,我大概也猜到了应该是mkl库文件设置出了问题,但是不知道该怎么设置,感觉设置的路径是对的啊。里边有一个问题,是-mkl没有命名过就直接出现了。前边有一个mklroot的路径设置,然后complib里设置的路径调用了这个路径。makefile不是由.f文件编译成.o文件,然后链接.o生成可执行文件吗?-m命令从哪里来的呢?是-mkl没设置对,然后他以为是-mkl是-m打头的命令,是这样吧? 发自小木虫Android客户端 |

3楼2016-05-25 15:30:24
小强V587
木虫 (正式写手)
- 应助: 5 (幼儿园)
- 金币: 1519.3
- 散金: 30
- 帖子: 411
- 在线: 87.3小时
- 虫号: 3138267
- 注册: 2014-04-15
- 性别: GG
- 专业: 光学

5楼2016-05-26 15:26:56
lijf517
木虫 (小有名气)
- 应助: 39 (小学生)
- 金币: 3391.9
- 红花: 14
- 帖子: 293
- 在线: 390.9小时
- 虫号: 2249203
- 注册: 2013-01-18
- 性别: GG
- 专业: 力学
|
函数要求输入一个int*的参数,但是你传入的是一个unsigned int*, 这两个参数类型不匹配。 发自小木虫Android客户端 |
» 本帖已获得的红花(最新10朵)
6楼2016-05-26 19:50:36
lijf517
木虫 (小有名气)
- 应助: 39 (小学生)
- 金币: 3391.9
- 红花: 14
- 帖子: 293
- 在线: 390.9小时
- 虫号: 2249203
- 注册: 2013-01-18
- 性别: GG
- 专业: 力学
|
与&符号无关。你看下声明load_int函数的头文件中,函数的第一个参数是什么类型的,再看下你调用时传入的packed参数是什么类型的。要传给相同类型才可以,特别是这种指针变量。 发自小木虫Android客户端 |
» 本帖已获得的红花(最新10朵)
7楼2016-05-26 19:54:42
小强V587
木虫 (正式写手)
- 应助: 5 (幼儿园)
- 金币: 1519.3
- 散金: 30
- 帖子: 411
- 在线: 87.3小时
- 虫号: 3138267
- 注册: 2014-04-15
- 性别: GG
- 专业: 光学

8楼2016-05-26 20:42:05
小强V587
木虫 (正式写手)
- 应助: 5 (幼儿园)
- 金币: 1519.3
- 散金: 30
- 帖子: 411
- 在线: 87.3小时
- 虫号: 3138267
- 注册: 2014-04-15
- 性别: GG
- 专业: 光学
送红花一朵 |
谢谢您的回答,对我帮助很大。我现在是初学者,也不知道这个是怎么回事,还请您不吝赐教: #ifdef __STDC__ int *unpack_rng( char *p) #else int *unpack_rng(p) char *p; #endif { int doexit=0,i, found, length, k, param; struct rngen *q; unsigned seed, lag1, lag2; unsigned char *packed; int rng_type; packed = (unsigned char *) p; packed += load_int(packed,4,&rng_type); if(strcmp((char *)packed,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", packed, GENTYPE); return NULL; } packed += strlen(GENTYPE)+1; packed += load_int(packed,4,&lag1); packed += load_int(packed,4,&lag2); packed += load_int(packed,4,&seed); 这是中间的一部分,出错位置出现的load_int也是第一次在代码中出现,在运行时也是警告,但是可以往下运行,结果对错不知道。还请您多帮助 |

9楼2016-05-26 20:48:50
lijf517
木虫 (小有名气)
- 应助: 39 (小学生)
- 金币: 3391.9
- 红花: 14
- 帖子: 293
- 在线: 390.9小时
- 虫号: 2249203
- 注册: 2013-01-18
- 性别: GG
- 专业: 力学
|
不知道load_int函数具体是怎么实现的。从你贴的这段代码来看,这段代码的意思大概是从传入的一组字符串里提取rng_type,lag1,lag2和seed的值。比如传入的是“123 45 678 9",那么这四个变量的值就分别问123,45,678,9。load_int函数应该是每次提取一个整数。这代码里涉及unsigned char, char和unsigned(int)。其中unsigned char取值范围为0~255,char取值范围为-128~127。这两种类型在内存中都占一个字节。unsigned(int)在内存中所占字节与编译器有关,现在一般都是4个字节即32位,取值范围为0~2的32次方-1。普通int的取值范围为-2的31次方~2的31次方-1。把unsigned char赋值给unsigned int或char赋值给int都没问题,因为后者取值范围比前者大,但是反过来就不行,会出错。同样unsigned char和char之间,以及unsigned int和int之间相互赋值也可能会出错,在赋值前必须清楚变量取值范围。你贴的这段代码不全,不是非常清楚其目的,但是感觉用了这么多中类型的变量有点乱,也没必要。你试着把packed=(unsigned char*) p改成packed = p试试。这样就和load_int函数声明的参数类型一致了。我觉得char*足够了,没必要转换成unsigned char*。当然这么改是否合适还要取决于函数load_int的具体实现 发自小木虫Android客户端 |
» 本帖已获得的红花(最新10朵)
10楼2016-05-26 23:38:36











回复此楼