科学网

 找回密码
  注册

tag 标签: 编译器

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

[转载]编译器和数学库对VASP的计算速度的影响(转)
DonarF1 2012-12-27 23:19
编译器和数学库对VASP的计算速度的影响(转) (2009-12-17 21:52:00) 转载 ▼ 标签: 杂谈 分类: 材料科学 编译器和数学库对vasp的计算速度的影响 一、所采用的机器、编译器、数学库、vasp程序和计算的例子 1. 机器是2.4 MHz的CPU、512M的内存,操作系统Redhat7.3的单机。 2. VASP:4.6版本 3. Fotran编译:PGI公司的pgf90 3.1版本;Intel公司的ifc 6.1版本。 4. 数学库: BLAS:blas.tgz;ATLAS (atlas3.6.0_Linux_P4SSE2.tar.gz); Kazushige Goto's BLAS (libgoto_p4_512-r0.94.so);MKL 5.2 version LAPACK:ATLAS (atlas3.6.0_Linux_P4SSE2.tar.gz);MKL 5.2 version;vasp.4.lib/lapack_double.o 注释:blas.tgz从http://www.netlib.org/blas/blas.tgz下载。 Atlas3.6.0_Linux_P4SSE2.tar.gz 从 http://prdownloads.sourceforge.net/math-atlas/atlas3.6.0_Linux_P4SSE2.tar.gz?download下载。 Libgoto_p4_512-r0.94.so从 http://www.cs.utexas.edu/users/kgoto/libraries/libgoto_p4_512-r0.94.so.gz下载。 5. 计算的例子:采用PBE-GGA的PAW势(Nb_pv, Sn_d 和 C)优化Nb2SnC的几何结构,主要的输入文件如下: -------INCAR--------------------- SYSTEM = Nb2SnC ENCUT = 500 ISMEAR = 1 ; SIGMA = 0.18 ISTART = 0 ; ICHARG = 2 GGA = PE EDIFF = 1E-5 ; EDIFFG = -1E-2 NSW = 60; IBRION = 2 ISIF = 3 ; POTIM = 0.1 PREC= Accurate ; NBANDS = 60 -------POSCAR--------------------- Nb2SnC: 3.241000000000000 0.0000000000000000 -1.0110073892063070 0.0000000000000000 0.8755580824825159 0.5055036946031537 0.0000000000000000 0.0000000000000000 0.0000000000000000 4.2888295708784200 4 2 2 Direct 0.3333333333333357 0.6666666666666643 0.0828382368328892 0.6666666666666643 0.3333333333333357 0.5828382368328890 0.6666666666666643 0.3333333333333357 0.9171617631671110 0.3333333333333357 0.6666666666666643 0.4171617631671108 0.3333333333333357 0.6666666666666643 0.7500000000000000 0.6666666666666643 0.3333333333333357 0.2500000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.5000000000000000 -------KPOINTS--------------------- auto 0 Gamma 11 11 5 0.0 0.0 0.0 -------------------------------------- 二、编译VASP时的主要参数设置 先编译blas.tgz,编译的步骤: 先建立一个blas目录,把blas.tgz拷贝到blas目录下,用命令tar xzvf blas.tgz解压blas.tgz, 得到很多.f的源文件。对pgf90,采用pgf90 –c *.f 编译这些源文件,得到很多.o的文件,然 后把.o文件用命令ar -rv blas.a *.o压缩成blas.a文件。对ifc,使用ifc –c *.f,其他的命令类 似。 Blas.a, libgoto_p4_512-r0.6.so, 从atlas3.6.0_Linux_P4SSE2.tar.gz解压得到的libatlas.a, libf77blas.a, libcblas.a, liblapack.a等库文件都放在vasp.4.6的上一级目录下的lib目录中。 重要的参数设置,就算makefile文件中的ATLASHOME, BLAS, LAPACK。 采用pgf90 编译VASP时,OFLAG = -O2 -tp p6 1. ATLASHOME= ../lib BLAS= -L$(ATLASHOME) -lf77blas -latlas LAPACK= ../vasp.4.lib/lapack_atlas.o -L$(ATLASHOME) -llapack -lcblas 2. ATLASHOME= ../lib BLAS= -L$(ATLASHOME) -lf77blas -latlas LAPACK= ../vasp.4.lib/lapack_double.o 3. BLAS= ../blas/blas.a LAPACK= ../vasp.4.lib/lapack_double.o 4. BLAS= ../lib/libgoto_p4_512-r0.94.so LAPACK= ../vasp.4.lib/lapack_double.o 采用ifc编译VASP时,OFLAG=-O3 -xW -tpp7 FFT3D = fft3dfurth.o fft3dlib.o 5. ATLASHOME= ../lib/ BLAS= -L$(ATLASHOME) -lf77blas -latlas LAPACK= ../vasp.4.lib/lapack_double.o 6. ATLASHOME= ../lib/ BLAS= -L$(ATLASHOME) -lf77blas -latlas LAPACK= ../vasp.4.lib/lapack_atlas.o -L $(ATLASHOME) -llapack -lcblas 7. BLAS= ../blas/blasifc.a LAPACK= ../vasp.4.lib/lapack_double.o 8. BLAS= ../lib/libgoto_p4_512-r0.94.so LAPACK= ../vasp.4.lib/lapack_double.o 9. BLAS=-L/opt/intel/mkl/lib/32 -lmkl_p4 -lguide -lpthread LAPACK= -lmkl_lapack 10. BLAS=-L/opt/intel/mkl/lib/32 -lmkl_p4 -lguide -lpthread LAPACK= ../vasp.4.lib/lapack_double.o 11. BLAS=-L/opt/intel/mkl/lib/32 -lmkl_p4 -lguide -lpthread LAPACK= -L/opt/intel/mkl/lib/32 -lmkl_lapack 三、计算测试得到的数据 Serial Total CPU Time User Time Elapsed time (min) (min) (min) 1 102.541 98.016 102.611 2 102.457 97.894 102.520 3 130.943 127.696 131.015 4 92.880 89.603 92.956 5 79.399 74.624 79.538 6 78.909 74.272 78.983 7 76.977 73.700 77.022 8 68.589 65.276 68.660 9 70.478 67.092 70.544 10 69.902 66.548 69.955 11 70.450 67.082 70.493 注释:Serial指的是在编译时,主要参数设置的情况,见第二部分中的说明。Total CPU Time 指的是计算所花的总的时间。单位是分钟。 四、结论 采用intel的ifc编译器,BLAS采用Kazushige Goto's BLAS,LAPACK采用lapack_double.o 的编译得到vasp计算速度最快。 采用pgf90,blas.tgz和lapack_double.o来编译得到的vasp的计算速度最慢。 对采用pgf90,BLAS采用Kazushige Goto's BLAS,编译得到的vasp的计算速度提 高9%~29%。但是对采用ifc时,BLAS采用Kazushige Goto's BLAS,编译得到的vasp的 计算速度提高10%~13%。
个人分类: vasp|3472 次阅读|0 个评论
[转载]path 设置
cwjwang 2012-8-30 09:41
在Linux里设置环境变量的方法(export PATH) 在Linux里设置环境变量的方法(export PATH) 一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“ /opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量: 1、直接用export命令: #export PATH=$PATH:/opt/au1200_rm/build_tools/bin 查看是否已经设好,可用命令export查看: # export declare -x BASH_ENV="/root/.bashrc" declare -x G_BROKEN_FILENAMES="1" declare -x HISTSIZE="1000" declare -x HOME="/root" declare -x HOSTNAME="localhost.localdomain" declare -x INPUTRC="/etc/inputrc" declare -x LANG="zh_CN.GB18030" declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s" declare -x LOGNAME="root" declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:" declare -x MAIL="/var/spool/mail/root" declare -x OLDPWD="/opt/au1200_rm/build_tools" declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin" declare -x PWD="/opt/au1200_rm/build_tools/bin" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass" declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242" declare -x SSH_CLIENT="10.3.37.152 2236 22" declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22" declare -x SSH_TTY="/dev/pts/2" declare -x TERM="linux" declare -x USER="root" declare -x USERNAME="root" 可以看到,环境变量已经设好,PATH里面已经有了我要加的编译器的路径。 2、修改profile文件: #vi /etc/profile 在里面加入: export PATH="$PATH:/ opt/au1200_rm/build_tools/bin " 3. 修改.bashrc文件: # vi /root/.bashrc 在里面加入: export PATH="$PATH: /opt/au1200_rm/build_tools/bin " 后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下: # echo $PATH 看看输出里面是不是已经有了/my_new_path这个路径了。 -----------------------------------------------------------------------------------------------------------------------  “/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。   如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 “PATH=$PATH:路径”可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可选:“/etc/profile”和用户主目录下的“.bash_profile”,“/etc/profile”对系统里所有用户都有效,用户主目录下的“.bash_profile”只对这个用户有效。   “PATH=$PATH:路径1:路径2:...:路径n”,意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所有路径。当用户输入一个一串字符并按回车后,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行。那个“$PATH”表示原先设定的路径仍然有效,注意不要漏掉。某些软件可能还有“PATH”以外类型的环境变量需要添加,但方法与此相同,并且也需要注意“$”。   注意,与DOS/Window不同,UNIX类系统环境变量中路径名用冒号分隔,不是分号。另外,软件越装越多,环境变量越添越多,为了避免造成混乱,建议所有语句都添加在文件结尾,按软件的安装顺序添加。   格式如下():   # 软件名-版本号   PATH=$PATH:路径1:路径2:...:路径n   其他环境变量=$其他环境变量:...   在“profile”和“.bash_profile”中,“#”是注释符号,写在这里除了视觉分隔外没有任何效果。   设置完毕,注销并重新登录,设置就生效了。如果不注销,直接在shell里执行这些语句,也能生效,但是作用范围只限于执行了这些语句的shell。   相关的环境变量生效后,就不必老跑到软件的可执行文件目录里去操作了。
2253 次阅读|0 个评论
FTP
maokebiao 2012-7-27 14:04
njujlp@hotmail.com 说(14:00): ftp://sidads.colorado.edu/pub/DATASETS/AMSRE/ADAP/L2_Land/ Kebiao 说: 谢谢 立鹏 说: 安装可能是要用lf95编译器 Kebiao 说: 哦,你运转过吗 立鹏 说: 没有 我大体看了下安装脚本 立法 lf95是富士通的编译器 就你昨天发给我的那个 Kebiao 说:
0 个评论
vic的不同编译器版本运算速度初测
lincystar 2012-3-11 06:40
vic的不同编译器版本运算速度初测 自: http://hi.baidu.com/longlivehejian/blog/item/a04c801df115e89b87d6b6da.html 2010-11-11 16:05 感谢 abur 的无私帮助,好人啊! 师弟小饭用mingw中的gfortran同样成功编译了vic官方网站中提供的汇流程序。所有的编译成果已经应用到了同门内部所有vic相关软件。 将vic4.0.4源代码在cygwin、mingw和visual studio(vs)环境中分别进行编译,并做运算速度测试。 【编译环境】 机器:intel i5-540 2.53GHZ,windows 7 32bit 运行库:cygwin1.dll(for cygwin), mscvrt.dll(for mingw),msvcr100.dll(for vc++ 2010) 【测试方法】 测试数据:淮河息县流域400网格 测试方法:IDL7.1中,spawn vic,输出systime差值 【测试结果】 可执行文件(vicNl.exe)大小:cygwin( 479KB ),mingw( 570KB ),vc++ 2010( 155KB ) 模型运行时间:cygwin( 536秒 ),mingw( 251秒 ),vc++( 144秒 ) 模型输出准确性: cygwin与mingw输出完全一致 ,vc++输出的小数位在部分时段有细微差别 【初步分析】 1. 运行库的差异直接决定了运算时间。cygwin编译的vic运行时需要启动cygwin运行环境,并在cygwin环境中再调用c运行库的支持。而mingw和vc++,直接使用的是windows下的c运行库mscvrt.dll和msvcr100.dll,运行速度改进显著。特别地,vc++ 生成的release版本,不但可执行文件大小大大减小,运行效率也大幅度提高; 2. 运行cygwin编译的vic,至少需要cygwin1.dll的支持。而mingw依赖于mscvrt.dll,该文件可能从windows 98起就作为windows系统自带的文件。因此,mingw编译的vic几乎可以在任何安装windows系统的电脑上运行。vc++编译的vic需要msvcr100.dll支持; 3. mingw中,无需改动任何代码,就可以成功编译vic,运行结果与cygwin下完全一致。但vc++中需要手动添加一些文件,并对源代码稍作修改。特别是rint函数,目前对它的理解还不够清晰,只做了简单的四舍五入的处理,以确保编译成功。这可能是vc++编译的vic的输出与前两者有细微差别的原因。 【使用建议】 1. 模型实际应用中采用运算速度相对较快且稳定的mingw版本; 2. vic模型的学习借助vc++来进行,充分利用vs的强大的集成开发环境; 3. 对vc++ release版本vic进行深入调试,找出细微差别的原因。毕竟该版本可以将运行时间缩短为cygwin的1/4,是相当有诱惑力的。
个人分类: 研究进展|0 个评论
[转载]如何安装多个版本gcc
shixuanlv305 2012-3-4 13:54
目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言 的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。 安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的 GCC 3.4.0。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软 件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。 系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC 安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要 做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.4.0,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。 按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。 1. 下载 在GCC网站上( http://gcc.gnu.org/ )或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 3.4.0。可供下载的文件一般有两种形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。 2. 解压缩 根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符): % tar xzvf gcc-3.4.0.tar.gz 或者 % bzcat gcc-3.4.0.tar.bz2 | tar xvf - 新生成的gcc-3.4.0这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。 在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。 3. 建立目标目录 目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。 例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录): % mkdir gcc-build % cd gcc-build 以下的操作主要是在目标目录 ${objdir} 下进行。 4. 配置 配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。 配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}): % ${srcdir}/configure --prefix=${destdir} 例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。 在我的机器上,我是这样配置的: % ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java 将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。 5. 编译 % make 这是一个漫长的过程。在我的机器上(P4-1.6),这个过程用了50多分钟。 6. 安装 执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限): % make install 至此,GCC 3.4.0安装过程就完成了。 6. 其它设置 GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在 lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到 并使用它们。 6.1 gcc、g++、gcj的设置 要想使用GCC 3.4.0的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。 首先,查看原来的gcc所在的路径: % which gcc 在我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令在/usr/bin目录下。我们可以把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接: % cd /usr/bin % ln -s ${destdir}/bin/gcc gcc34 % ln -s ${destdir}/bin/g++ g++34 % ln -s ${destdir}/bin/gcj gcj34 这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。 6.2 库路径的设置 将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。 例如,如果GCC 3.4.0安装在/usr/local/gcc-3.4.0目录下,在RH Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句: setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH 7. 测试 用新的编译命令(gcc34、g++34等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。 8. 根据需要,可以删除或者保留${srcdir}和${objdir}目录。
个人分类: 编程|0 个评论
Ubuntu 10.04下安装PGI Fortran 10.2(pgf77,pgf90)
ljl627 2012-2-26 09:50
Ubuntu 10.04下安装PGI Fortran 10.2(pgf77,pgf90)
Ubuntu 10.04下安装PGI Fortran 10.2 由于在linux下运行ecomsed,需要编译makefile,试过了ifort编译器,发现编译器和自己的能力都不给力,又试试FC=pgf90,发现原来安装的pgflinux.711的licen se.dat过期了,悲剧啊,尝试了两天,终于找到10.2版本还可用,功夫不负有心人啊! 第一步,先去官网下载编译器,直接去下载10.2版本,我从MU(http://www.mnmuc.org/thread-1104-1-1.html)上下载了一个64位PGI(10.2)编译器的license.dat 新建一个目录 mkdir pgilinux-10.2 cd pgilinux-10.2 然后将pgilinux-10.2.tar.gz解压缩: tar -zxvf 存放目录/pgilinux-10.2.tar.gz 将pgilinux-10.2-patch.tar.gz 里的 makelocalrc 替换 pgilinux-10.2/linux86/10.2/bin/下的makelocalrc文件,(为了解决gblic版本问题,见另一篇“pgi安装问题汇总”) 切换到root用户 su mkdir /opt/pgi 将pgilinux-10.2-patch.tar.gz里的PGI.Workstation.Complete.v10.2.LINUX.x64_Crack/pgi_10.2.0_linux32_patch拷贝到/opt/pgi 里,然后将其改为可执行文件: chmod +x pgi_10.2.0_linux32_patch 再将pgilinux-10.2-patch.tar.gz里的PGI.Workstation.Complete.v10.2.LINUX.x64_Crack/license.dat 拷贝到/opt/pgi 里 进入目录pgilinux-10.2 开始安装 ./install Do you accept these terms? Accept 1. Single system install 2. Network install Please choose install option(1-2): 1 Install the ACML? y Installation directory? /opt/pgi Do you wish to install MPICH1?(y/n) n Do you want the files in the install directory to be read-only? n 安装完成 开始设置环境变量 见博文“PGI-linux-10.2 安装问题汇总” 。 pgilinux-10.2-patch.tar.gz
409 次阅读|0 个评论
[转载]PGI-linux-10.2安装问题汇总
ljl627 2012-2-26 09:20
PGI-linux-10.2 安装问题汇总 PGI是Portland公司开发的编译器,可以编译高性能的fortran(77、9X)、C、C++,尤其是对AMD CPU优化非常好。这里汇总了安装过程中最常见的问题以及解决方案。 一、bash环境设置 相关问题 :安装成功后,运行pgf90等命令显示“bash: pgf90: command not found”。 解决 :在.bashrc或者.bash_profile中设置环境,做法如下(以我安装pgi10.2为例) cd ~ vim .bashrc 然后在最后追加 export PATH=/opt/pgi/linux86/10.2/bin:$PATH export MANPATH=$MANPATH:/opt/pgi/linux86/10.2/man:$MANPATH export LM_LICENSE_FILE=/opt/pgi/license.dat export LM_LICENSE_FILE =/opt/pgi /license.dat 保存退出 然后source .bashrc 同样切换到root用户下(输入su) cd /root gedit .bashrc 添加同样的环境变量 保存退出 然后source .bashrc 再输入pgf90,显示: pgf90-Warning-No files to process 说明设置成功! 二、glibc、crtbegin.o问题 问题: 受 系统安装的gcc编译器版本的影响,安装pgi有时候会遇到,例如我在安装pgi6.0-5时出现 ERROR: unknown glibc version (2.4),或者还有朋友遇到安装完毕后用pgf90编译fortran程序提示找不到crtbegin.o文件,这属于同一问题。 实际上pgi各模块已经写在硬盘上了,但是环境没设置好,所以还是不能工作。 具体原因: 由于安装文件中的makelocalrc不能正确生成localrc,所以pgi不能正常工作,这与使用哪个发行版无关. 解决方案: 以我的系统为例,我用ubuntu10.04,安装pgi 10.2 1. (不推荐!) 手动编写一个文本文件localrc,放在/usr/pgi/linux86/6.0/bin目录下 set LFC=-lg2c; set LDSO=/lib/ld-linux.so.2; set GCCDIR=/usr/lib/gcc/i486-linux-gnu/4.1.2; set GCCINC=; set G77DIR=/usr/lib/gcc/i486-linux-gnu/3.4.6/; set LOCALRC=YES; set THROW=__THROW=; set HAMMER=; set X86_64=; 这一方案简单,但是对于我运行ecomsed的makefile文件,并不管用!!! 2. (推荐第二种!!!) 用如下文件替换安装目录中的makelocalrc文件,然后重新安装(该文件需要设置为可执行) (忘了抄的哪位高手的) 主 要在66,267行附近,314行附近的改动是为了解决安装错误 : /usr/pgi/linux86/6.1/bin/makelocalrc: line 315: =安装: / u sr/l ib/gcc/i386-re dhat- linux/4.1.0/: 没有那个文件或目 录. 修改后的makelocalrc如下(修改部分已用整行长注释条标出): #! /bin/sh ## ## Copyright 1990-2000, The Portland Group, Incorporated. ## Copyright 2000-2005, STMicroelectronics, Incorporated. ## All rights reserved. ## ## STMICROELECTRONICS, INCORPORATED PROPRIETARY INFORMATION ## This software is supplied under the terms of a license agreement ## or nondisclosure agreement with STMicroelectronics and may not be ## copied or disclosed except in accordance with the terms of that ## agreement. ## # Just in case PATH=/usr/bin:/bin:$PATH TMPDIR=${TMPDIR:-/tmp} usage() { echo "Usage: $0 installdir" echo echo "Example: $0 -x /usr/pgi/linux86/6.1" quit 1 } quit() { # Cleanup scratch files. rm -rf $scratch exit $1 } copy_files() { # $1 is source dir, $2 is destination dir if test -n "$1"; then if test -d "$1"; then if test ! -d $2 ; then mkdir $2 fi ( cd $1 ; tar cf - * | ( cd $2; tar xpf - )) fi fi } pretty_print() { echo $@ | awk -F^ '{printf("%20-s %s\n",$1,$2);}' } print_line() { echo $1 $2 $3 $4 $5 $6 $newrc } get_glibc_version() { # Determine the GNU LIBC version. if test -r /lib64/libc.so.6 ; then LIBC=/lib64/libc.so.6 # should only exist on a 64-bit Linux OS. elif test -r /lib/libc.so.6 ; then LIBC=/lib/libc.so.6 # should exist on any Linux OS. else echo "ERROR: /lib/libc.so.6: not found or no read permission" quit fi x=`strings $LIBC | grep 'GNU C Library' | cut -d, -f1 | awk '{print $7}'` if test -n "$x" ; then ######################################################################################### GLIBC_VERSION=2.4.4 ##原来是"$x" else GLIBC_VERSION=2.4.4 ##原来是空的 ######################################################################################## fi unset x return } get_linker_version() { x=`grep collect2 $out | sed q | sed -e 's/.* -dynamic-linker //' -e 's/ .*//'` if test -n "$x" ; then LINKER=$x else LINKER= fi unset x return } get_specs_file() { # This command pipeline should be I18N-capable. x=`awk '/gcc.*specs/ {print $NF}' $out` if test -n "$x" ; then SPECSFILE=$x else SPECSFILE= fi unset x return } # Stop if not Linux. opsys=`uname -s | tr ' ' ' '` if test "$opsys" != "linux" ; then echo echo "$0: `uname -n` is not running Linux" quit 1 fi pgi50=1 noexec=1 ofile=0 use_pthreads=1 no_m32_support=0 check_crt_files=0 set_hammer_empty=0 gcc=gcc g77=g77 scratch=$TMPDIR/PGI-INSTALL.$$ if test ! -d $scratch ; then mkdir $scratch fi while test -n "$1"; do case $1 in -n ) noexec=1 ;; -x ) noexec=0 ;; -o ) ofile=1 ; noexec=0 ;; -gcc ) shift; gcc=$1 ;; -g77 ) shift; g77=$1 ;; * ) start=$1 ;; esac shift done if test -z "$start" ; then usage fi if test ! -d $start ; then echo "$0: $start: directory not found" usage fi if test "$start" = "." ; then start=`pwd` fi if test "$pgi50" -eq 1 ; then # Example: 5.0 and above: # start = /usr/pgi/linux86/5.0 # installdir = /usr/pgi/linux86 # version = 5.0 # base = /usr/pgi/linux86/5.0 # target = linux86 installdir=`dirname $start` version=`basename $start` base=$start target=`basename $installdir` else # Example: 4.1 and below: # start = /usr/pgi # installdir = /usr/pgi # base = /usr/pgi/linux # version = 5.0 # target = linux86 installdir=$start version=`cat $start/.release` base=$start/linux86 target="linux86" fi # Define target-specific options needed below. arch=`uname -m` case "${target}:${arch}" in linux86:x86_64 ) gccopt="-o $scratch/a.out -m32 -v" g77opt=$gccopt subdir="/32" check_crt_files=1 use_64bit_rcfiles=11 install_64_bit=0 lib=/lib usrlib=/usr/lib ;; linux86:* ) set_hammer_empty=1 gccopt="-o $scratch/a.out -v" g77opt=$gccopt use_64bit_rcfiles=10 install_64_bit=0 lib=/lib usrlib=/usr/lib ;; linux86-64:x86_64 ) gccopt="-o $scratch/a.out -v" g77opt=$gccopt lib=/lib64 usrlib=/usr/lib64 install_64_bit=1 use_64bit_rcfiles=0 ;; linux86-64:* ) echo "ERROR: target doesn't match architecture" exit 1 ;; esac localrc=$base/bin/localrc newrc=$scratch/localrc.$$ # Find the version of GLIBC used on this system so that the appropriate # files are copied from lib-linux86-g* to lib and/or liblf. LIBC=$lib/libc.so.6 if test ! -f $LIBC ; then echo "ERROR: file $LIBC: not found." quit 1 fi get_glibc_version # sets GLIBC_VERSION case "$GLIBC_VERSION" in 2.3.* ) glibc=232 LIB=$base/lib-linux86-g232 LIBLF=$LIB-lf INC=$base/include-g23 ;; 2.2.9* ) glibc=2293 LIB=$base/lib-linux86-g2293 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.2.5 ) glibc=225 LIB=$base/lib-linux86-g225 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.2.4 ) glibc=224 LIB=$base/lib-linux86-g224 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.2.2 ) glibc=222 LIB=$base/lib-linux86-g22 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.1.9* | 2.2*) glibc=22 LIB=$base/lib-linux86-g22 LIBLF=$LIB-lf INC=$base/include-g22 ;; 2.1. ) glibc=212 LIB=$base/lib-linux86-g212 ;; 2.1.1 ) glibc=211 LIB=$base/lib-linux86-g211 ;; #################################################################################### 2.4.4) ##这都是加上的 其实只要改GLIBC_VERSION glibc=232 ##对应上面半括号中较新版本版本号即可 LIB=$base/lib-linux86-g232 LIBLF=$LIB-lf INC=$base/include-g23 ;; ##################################################################################### * ) echo "ERROR: unknown glibc version ($GLIBC_VERSION)." quit 1 ;; esac # PGI software needs some of the gcc libraries. Run gcc to determine # to determine which linker and libraries are actually being used. type $gcc /dev/null 21 if test $? -eq 1 ; then echo "ERROR: gcc not found;" echo " successful use of compilers requires existence of gcc libraries" quit 1 fi cfile=$scratch/hello-$$.c ffile=$scratch/hello-$$.f cat $cfile EOF_HELLO_C #include stdio.h #include stdlib.h main(){ printf("Hello world!\n"); exit(0); } EOF_HELLO_C cat $ffile EOF_HELLO_F program hello write(*,100) 100 format('Hello world!') end EOF_HELLO_F out=$scratch/gccrun.$$ $gcc $gccopt $cfile $out 21 if test ! -s $out ; then echo "ERROR: gcc failed to execute for reasons unknown." quit 1 fi ######################################################################## ####$gccbase=`$gcc -print-search-dirs | sed -e 's/^install: //' -e 1q` ####if test -d $gccbase$subdir ; then #### GCCDIR="$gccbase$subdir" ##原有的 ####fi ####gccversion=`$gcc -dumpversion` ####################################################################### libgcc=`$gcc -print-libgcc-file-name` gccbase=`dirname $libgcc` GCCDIR="$gccbase$subdir" ##自己加的 gccversion=`basename $gccbase` ########################################################################## # Check and see whether directory that gcc claims to exist actually # does exist. if test ! -d $gccbase ; then echo "ERROR: directory $gccbase: not found;" echo " successful use of compilers requires existence of gcc libraries!" quit 1 fi if test -d ${gccbase}include ; then GCCINC=${gccbase}include else unset GCCINC fi # Find the linker get_linker_version # returns LINKER if test ! -x $LINKER ; then echo "ERROR: Linker $LINKER: not found" quit 1 fi # Which g77? PGI software needs the g77 libraries, so look for the g77 libs. type $g77 /dev/null 21 if test $? -eq 1 ; then echo "WARNING: g77 not found; this may cause problems during use" G77DIR='""' else out=$scratch/g77run.$$ $g77 $g77opt $ffile $out 21 libgcc=`$g77 -print-libgcc-file-name` g77base=`$g77 -print-search-dirs | sed -e 's/^install: //' -e 1q` if test -d $g77base$subdir ; then G77DIR="$g77base$subdir" else G77DIR='""' fi f2c=`cat $out | grep lf2c` g2c=`cat $out | grep lg2c` if test -n "$f2c" ; then G77LIB="-lf2c" fi if test -n "$g2c" ; then G77LIB="-lg2c" fi fi if test -n "$G77LIB" ; then print_line "set LFC=$G77LIB;" fi # Which dynamic linker? if test "$LINKER" != "/lib/ld-linux.so.1" ; then print_line "set LDSO=$LINKER;" fi # CDK uses its own libmpich.a. if test -f "$base/bin/mpirun" ; then print_line "set MPILIB=$base/lib;" MPILIB=$base/lib/libmpich.a fi print_line "set GCCDIR=$GCCDIR;" print_line "set GCCINC=$GCCINC;" print_line "set G77DIR=$G77DIR;" #Add setaff_bind.o and -lnuma at link line x=$base x=`echo $x | sed -e 's/.*86-64.*/86-64/'` if test "$x" = "86-64" ; then if test -e $usrlib/libnuma.so ; then print_line 'set NUMAOBJS=$COMPLIBOBJ/setaff_bind.o;' print_line "set NUMALIBS=-lnuma;" fi fi if test $pgi50 -eq 0 ; then print_line "set STDRPATH=-rpath \$PGI/linux86/lib;" fi print_line 'set LOCALRC=YES;' if test "$noexec" -eq 1 ; then pretty_print 'PGI directory' ^ $installdir pretty_print 'PGI version' ^ $version pretty_print 'PATH entry' ^ "$base/bin" pretty_print 'System linker' ^ $LINKER pretty_print 'GCC directory' ^ $GCCDIR pretty_print 'GCC headers' ^ $GCCINC pretty_print 'G77 directory' ^ $G77DIR pretty_print 'G77 headers' ^ $G77LIB if test -n "$GLIBC_VERSION" ; then pretty_print 'GNU C version' ^ $GLIBC_VERSION pretty_print 'PGI glibc libs' ^ $LIB pretty_print 'PGI glibc headers' ^ $INC else pretty_print 'Glibc version' ^ 'no' fi if test -n "$LIBLF" ; then pretty_print 'Large file support' ^ $LIBLF else pretty_print 'Large file support' ^ 'no' fi if test -n "$MPILIB" ; then pretty_print 'MPILIB' ^ $MPILIB fi if test $use_pthreads -eq 1 ; then pretty_print 'Threads' ^ "$usrlib/libpthread.{a,so}" else pretty_print 'Threads' ^ "$base/lib/libpgthread.{a,so}" fi if test $no_m32_support -eq 1 ; then pretty_print 'gcc supports -m32' ^ 'no' else pretty_print 'gcc supports -m32' ^ 'yes' fi quit 0 fi # Make the necessary changes to meet glibc dependencies. if test -n "$glibc" ; then copy_files $LIB $base/lib case "$glibc" in 22* | 23* ) copy_files $INC $base/include print_line "set THROW=__THROW=;" ;; 21* ) ;; esac # Large file support. if test -n "$LIBLF" ; then copy_files $LIBLF $base/liblf else rm -rf $base/liblf fi # Newer distributions of Linux do not need PGI-compiled versions of # threads libraries. if test $use_pthreads -eq 1 ; then # Only create a symlink if the target file exists and # the link does not. if test -e $usrlib/libpthread.a ; then if test ! -h $base/lib/libpgthread.a ; then ln -s $usrlib/libpthread.a $base/lib/libpgthread.a fi fi if test -e $lib/libpthread.so.0 ; then if test ! -h $base/lib/libpgthread.so ; then ln -s $lib/libpthread.so.0 $base/lib/libpgthread.so fi fi fi # Adjust header files based on the gcc version. need_stddef=1 case "$gccversion" in 3.3* ) copy_files $base/include-gcc33 $base/include ;; 3.4* ) copy_files $base/include-gcc34 $base/include need_stddef=0 ;; 4.* ) copy_files $base/include-gcc40 $base/include need_stddef=1 ;; * ) ;; esac if test $need_stddef -eq 0 ; then rm -f $base/include/stddef.h fi # Changes for 32-bit installs. if test $set_hammer_empty -eq 1 ; then print_line "set HAMMER=;" print_line "set X86_64=;" fi if test $install_64_bit -eq 0 ; then if test -f /etc/redhat-release ; then grep 'release 9' /etc/redhat-release /dev/null 21 if test $? -eq 0; then print_line "set LBSTAT=-lpthread -lpthread_nonshared;" fi fi fi # Stock distributions may need extra help in finding crt files. if test $check_crt_files -eq 1 ; then if test ! -f /usr/lib64/32/crt1.o ; then print_line "set DEFLIBDIR=/usr/lib;" print_line "set DEFSTDOBJDIR=/usr/lib;" print_line "set EXTRAASARGS=--32;" fi fi # For production installations, recover some space by unneeded files. if test "$version" != "dev" ; then rm -rf $base/include-g* echo $GLIBC_VERSION $base/glibc_version fi # Fix the 32/64-bit .*rc files. if test $use_64bit_rcfiles -eq 11 ; then files=`ls -1 $base/bin/.pg*-64 2/dev/null` for i in $files ; do x=`echo $i | sed -e 's/-64$//'` mv -f $i $x done rm -f $base/bin/.pg*-32 /dev/null 21 elif test $use_64bit_rcfiles -eq 10; then files=`ls -1 $base/bin/.pg*-32 2/dev/null` for i in $files ; do x=`echo $i | sed -e 's/-32$//'` mv -f $i $x done rm -f $base/bin/.pg*-64 /dev/null 21 fi fi # Add timestamp and username. print_line '# makelocalrc executed by ' `whoami` `date` # If $ofile is set, then display the file to stdout. Otherwise, write # it to $localrc. if test $ofile -eq 1 ; then echo "##### localrc contents #####" cat $newrc echo "############################" rm -f $newrc else if test -f $localrc ; then mv -f $localrc $localrc.bak chmod -f 0644 $localrc.bak fi mv -f $newrc $localrc chmod -f 0644 $localrc fi # Copy omp_lib.mod from lib directory to include directory echo if test -f $base/lib/omp_lib.mod ; then cp -f $base/lib/omp_lib.mod $base/include/omp_lib.mod fi if test -f $base/lib/omp_lib_kinds.mod ; then cp -f $base/lib/omp_lib_kinds.mod $base/include/omp_lib_kinds.mod fi quit 0 ( 过程中 注意:找到软件包中的 makelocalrc文件(linux86/bin下),用新的文件替换,同时 应该增加 makelocalrc 可执行权限:chmod +x makelocalrc,很明显,无此步骤照样不成功) 转自:http://blog.163.com/xiaowei_090513/blog/static/1177183592009527111837605/
6517 次阅读|0 个评论
[转载]gfortran,g77,g95 Introductions
GoogleMIT 2012-2-23 16:35
Gcc Fortran Intro 出自Ubuntu中文 在 GCC 4.0 之前, g77 是 GCC 的一部分;此后, gfortran 是 GCC 的一部分。 g95 是一个基于 GCC 的 Fortran 编译器,它不是 GCC 的一部分。 g77介绍 g77 是 Fortran77 的编译器。它对 Fortran 77 标准提供完备的支持,并支持 Fortran 90 和 95 的部分特性。 由于 Fortran 77 标准在数值计算中的影响力,g77 可能是应用最广的Fortran编译器。 在 GCC 4.0 之前,g77 是 GCC 的一部分,但现在,g77 已经停止开发。 g77为何不再被支持 : gcc-4.0 改变了 gcc 中所有语言的前端界面。由于缺少志愿者和公司来更新 g77 到 gcc-4.0 的架构,因此它被废弃了。不同于 g77,gfortran 项目处于活跃开发期,因此它 取代了 g77 的位置。 这是一篇 g77使用入门 注意 :从8.10 开始,Ubuntu 软件仓库中不再包含 g77 软件包 gfortran介绍 GNU 的 Fortran 95 编译器,支持Fortran95和一部分Fortran2003的功能。 取代 g77 集成在 GCC 4.0 及以後版本中 这是一篇 gfortran使用入门 关于g95 gfortran 不是 g95 : gfortran 是一个 Fortran 95 的编译器,它是 GCC 的一部分。 g95 是另一个 Fortran 95 的编译器,它是一个基于 GCC 的编译器。 历史 : Andrew Vaught 在 2000 年上半年创建了 g95──一个使用 GCC 做后端的开放源代码的 Fortran 95 编译器。在随后的两年里,这是一个多人协作的项目,但是 2002 年下半年 Andrew Vaught 决定单独开发 g95。2003 年 1 月,gfortran 项目创建,它建立在当时 GPL 授权的 g95 源码的基础上,目的是允许协同开发并与 GCC 代码集成。 从那时起,Andrew 一个人在持续地开发 g95,g95 与 gfortran 的差别也越来越大。因此,gfortran 项目组也无法为 g95 提供支持或建议。
个人分类: PROGRAM|666 次阅读|0 个评论
软件设计和软件工程的双重路径原理及其应用(示例 1 + 示例 2)
热度 2 geneculture 2011-11-19 08:08
软件设计和软件工程的双重路径原理及其应用(示例 1 + 示例 2)
第二路径的思想渊源 第二路径的基本特征 ........................................................................... 双语者自己都可把翻译的工作都担当了,试问:他是否还必须其他人为他充当翻译呢? 第二路径的基本假设 示例 1 软件(机器语言:二进制数)--编译器--程序员--知识工程师--用户(自然语言:英语) 软件(数学语言:十进制数)------------------------------------用户(自然语言:汉语) 示例 2 软件(二进制数)--编译器--(编程语言)程序员--系统设计师--系统分析师--用户(英语) 软件(十进制数)------------------------------------------------------------------用户(汉语) 参考文献 邹晓辉,邹顺鹏. 间接计算模型和间接形式化方法 . 软件. 2011(05):1-5 邹晓辉,邹顺鹏. 协同智能计算系统——理论模型及其应用 . 软件. 2011(06):1-8 邹晓辉,邹顺鹏.软件工程学科何以独特——形式化方法的双重路径 .软件,2011(07):1-14
个人分类: 双语信息处理|1938 次阅读|9 个评论
[转载]matlab中mcc编译器参数的含义
ChenboBlog 2011-11-7 23:57
创建动态链接库主要有两种方法: 一种是使用Matlab 为VC++ IDE提供的Add-in。这种方法比较简单,方便快捷,只要在VC++中创建工程的时候选择Matlab Project Wizard,并且在接下来的Step 1 中的Visual Matlab Application Type选择Shared M-DLL 就可以了。接下来就是添加*.m 文件, 进行编译了。另一种方法就是使用Matlab 的mcc 命令将*.m文件编译为动态链接库( *.DLL)。因为Add-in 也是调用Compiler 的命令mcc 进行编译工作的, 而且有时候这个Add-in 还会出现不能使用的情况, 因此这里主要讨论使用mcc 命令的方法。 关于mcc 有很多参数可以使用, 而且有多种用法,主要参数如下: Bold entries in the Comment/Options column indicate default values -a filename Add filename to the CTF archive 无 -b Generate Excel-compatible formula function Requires MATLAB Builder for Excel -B filename ] Replace -B filename on the mcc command line with the contents of filename The file should contain only mcc command line options. These are MathWorks included options files: -B csharedlib:fooC shared library -B cpplib:fooC++ library -c 生成C语言包装函数 Equivalent to -T codegen -d directory 输出到指定目录 无 -f filename Use the specified options file, filename, when calling mbuild mbuild -setup is recommended. -g 生成 debugging 信息 无 -G 同 -g 无 -I directory Add directory to search path for M-files MATLAB path is automatically included when running from MATLAB, but not when running from DOS/UNIX shell. -l 创建库函数的宏 等效于命令 -W lib -T link:lib -m 生成C语言独立运行程序的宏 等效于命令 -W main -T link:exe -M string 传递字符串给 mbuild Use to define compile-time options. -N Clear the path of all but a minimal, required set of directories 无 -o outputfile 制定最终可执行文件的名字 Adds appropriate extension -P directory Add directory to compilation path in an order-sensitive context Requires -N option -R option Specify run-time options for MCR option = -nojvm -nojit -S Create Singleton MCR Requires MATLAB Builder for COM -T target Specify output stage target = codegen compile: bin link: bin where bin =exe lib -v 显示详细; 显示编译步骤 无 -w option 显示警告信息 option = list level level :string where level =disable enable error -W type Control the generation of function wrappers type = main cpplib:string lib:string none com:compname,clname,version -Y licensefile Use licensefile when checking out a Compiler license 无 -z path 指定库文件和包含文件的路径 无 -? 显示帮助信息 无 Feedback
4706 次阅读|0 个评论
[转载]ubuntu下安装Lapack软件包的安装和使用(已验证)
热度 1 zhoufcumt 2011-9-18 14:41
1.从netlib下载最新版本的源代码包lapack-3.3.1.tgz 在http://www.netlib.org/lapack/ 2. 将源代码解压缩 tar -zxf lapack-3.1.1.tgz 3. 编辑 make.inc 文件,进行一些系统相关的编译参数设置 PLAT : 设置生成的库函数的后缀,比如 SUN, LINUX之类的,当然也可以不设置; FORTRAN : 设置编译器,比如 g77, gfortran, ifort, g95 等等; OPT:设置编译选项,根据具体的编译器和优化要求进行设置; LOADER : 设置成和FORTRAN 一样就可以了; change the lines: BLASLIB = ../../blas$(PLAT).a LAPACKLIB = lapack$(PLAT).a TMGLIB = tmglib$(PLAT).a EIGSRCLIB = eigsrc$(PLAT).a LINSRCLIB = linsrc$(PLAT).a to --- BLASLIB = ../../libblas$(PLAT).a LAPACKLIB = liblapack$(PLAT).a TMGLIB = libtmglib$(PLAT).a EIGSRCLIB = libeigsrc$(PLAT).a LINSRCLIB = liblinsrc$(PLAT).a 4. 编辑 Makefile 找到 lib: 选项。然后设置需要编译的库函数如下 #lib: lapacklib tmglib lib: blaslib lapacklib tmglib 默认的情况是不编译 blas 库的。 5. 编译和测试 Lapack. 在源代码的根目录下输入 make 回车。然后 make 程序就会自动进行编译和测试。 6. 将liblapack.a,libblas.a 拷贝到 LD_LIBRARY_PATH 目录下 cp *.a /lib,或者它们所在的目录加入到 LD_LIBRARY_PATH 环境变量中,或者在编译时候加上 “-L lapack所在目录/” 选项。编译的时候加上编译选项 -llapack -lblas。
个人分类: Ubuntu|14931 次阅读|1 个评论
linux下安装gcc编译器建议
dalilijiang 2011-8-18 18:51
(1)在安装以前建议首先安装一些库文件。方法:在ubuntu 10.10下 sudo apt-get install mpc libmpc-dev libmpfr-dev libppl0.10-dev libcloog-ppl-dev zlib1g zlib1g-dev libc6-dev-i386 m4 flex 及 gmp,下载gmp源文件 ./configure make sudo make install make check gmp默认安装位置是 /usr/local/lib mpc和mpfr默认安装位置是 /usr/lib (2)在redhat或fedora下打开DVD中的包文件 (这里仅以gcc-4.1.2为例,其它版本或64位系统查看一下DVD中相应文件名称) # rpm -ivh cpp-4.4.3-8.fc13.i386.rpm # rpm -ivh kernel-headers-2.6.18-164.el5.i386.rpm # rpm -ivh glibc-headers-2.5-42.i386.rpm # rpm -ivh glibc-devel-2.5-42.i386.rpm # rpm -ivh libgomp-4.4.0-6.el5.i386.rpm # rpm -ivh gcc-4.1.2-46.el5.i386.rpm # rpm -ivh libstdc++-devel-4.1.2-46.el5.i386.rpm # rpm -ivh gcc-c++-4.1.2-33.i386.rpm
个人分类: 学习|5728 次阅读|0 个评论
[转载]gcc、glibc和binutils模块之间的关系,以及在现有系统上如何
onewaystreet 2011-7-24 17:01
一、关于gcc、glibc和binutils模块之间的关系 1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。 2、binutils提供了一系列用来创建、管理和维护二进制目标文件的工具程序,如汇编(as)、连接(ld)、静态库归档(ar)、反汇编 (objdump)、elf结构分析工具(readelf)、无效调试信息和符号的工具(strip)等。通常,binutils与gcc是紧密相集成 的,没有binutils的话,gcc是不能正常工作的。 3、glibc是gnu发布的libc库,也即c运行库。glibc是linux系统中最底层的api(应用程序开发接口),几乎其它任何的运行库 都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下: (1)string,字符串处理 (2)signal,信号处理 (3)dlfcn,管理共享库的动态加载 (4)direct,文件目录操作 (5)elf,共享库的动态加载器,也即interpreter (6)iconv,不同字符集的编码转换 (7)inet,socket接口的实现 (8)intl,国际化,也即gettext的实现 (9)io (10)linuxthreads (11)locale,本地化 (12)login,虚拟终端设备的管理,及系统的安全访问 (13)malloc,动态内存的分配与管理 (14)nis (15)stdlib,其它基本功能 二、在现有系统上如何升级(redhat9上实践的) 1、升级这些库时,最好不要覆盖系统中缺省的;因为这些库,尤其是glibc库,是系统中最核心的共享库和工具,如果盲目覆盖,很可能导致整个系统 瘫痪,因为一般更新glibc库时,其它所有以来libc库的共享库都需要重新被编译一遍。因此,为了调试某个程序进入glibc时,最好把glibc安 装到/usr/local/lib下。 2、首先编译glibc库。注意最好令建立一个glibc-build的目录,configure时加上--enable-add-ons=linuxthreads选项。make install安装到/usr/local下。 3、修改gcc的spec文件(/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs),更改ld-linux.so.2为/usr/local/lib下的新的共享库装载器。 4、编译binutils库,此时被编译出的程序会连接到/usr/local/lib下的新的libc库。注意,在configure前,需要设 置ld缺省连接的路径(LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib),否则binutils会 configure出错,找不到libc中的一些符号。具体步骤如下: (1)export LIBRARY_PATH=/usr/local/lib:/lib:/usr/lib (2)mkdir binutils-build cd binutils-build (3)../binutils-2.13.90.0.18/configure (4)make (5)make -C ld clean (6)make -C ld LIB_PATH=/usr/lib:/lib:/usr/local/bin(设置编译后的ld的缺省库搜索路径,后面的比前面的优先级高) (7)make install 三、总结 1、运行时,动态库的装载依赖于ld-linux.so.6的实现,它查找共享库的顺序如下: (1)ld-linux.so.6在可执行的目标文件中被指定,可用readelf命令查看 (2)ld-linux.so.6缺省在/usr/lib和lib中搜索;当glibc安装到/usr/local下时,它查找/usr/local/lib (3)LD_LIBRARY_PATH环境变量中所设定的路径 (4)/etc/ld.so.conf(或/usr/local/etc/ld.so.conf)中所指定的路径,由ldconfig生成二进制的ld.so.cache中 2、编译时,搜索库的路径顺序如下: (1)ld-linux.so.6由gcc的spec文件中所设定 (2)gcc --print-search-dirs所打印出的路径,主要是libgcc_s.so等库。可以通过GCC_EXEC_PREFIX来设定 (3)LIBRARY_PATH环境变量中所设定的路径,或编译的命令行中指定的-L/usr/local/lib (2)binutils中的ld所设定的缺省搜索路径顺序,编译binutils时指定。(可以通过“ld --verbose | grep SEARCH”来查看) 3、二进制程序的搜索路径顺序为PATH环境变量中所设定。一般/usr/local/bin高于/usr/bin 4、编译时的头文件的搜索路径顺序,与library的查找顺序类似。一般/usr/local/include高于/usr/include
个人分类: linux学习|1792 次阅读|0 个评论
[转载]mcc、mbuild和mex命令详解
songhaiyu 2011-7-16 22:15
http://www.matlabsky.com/thread-544-1-1.html 好多学习Matlab扩展编程的人经常把这几个命令给搞混淆的,下面我就给大家仔细讲讲,希望呢给大家讲明白! 先简单的说说mcc、mbuild和mex到底怎么回事: mcc将M文件转换成C/C++文件和相应的MEX包裹文件(需要Matlab编辑器),但在特定条件下可以自动调用mbuild或者mex mex将C/C++文件(入口函数为mexfunction())编译成MEX(DLL)文件(需要C/C++编辑器) mbuild将C/C++文件(入口函数为main())生成可独立运行的C应用程序(需要C/C++编辑器) 复制代码 一 mcc命令 Matlab编译器使用 mcc命令能将一个M文件翻译成C文件,同时生成一个相应的包裹文件 ,这个包裹文件包含了编译器产生的代码和它支持的可执行文件类型之间所需的接口。利用改包裹文件提供的接口,生成的C文件能用在任何编译器所支持的可执行文件类型(如MEX文件、EXE文件、DLL文件)中,这些C文件与最终生成的可执行文件是相互独立的。 Matlab编译器(Lcc)在 特定的条件下能自动调用mex和mbuild函数 ,尤其是mcc –x/-m/-p时。 (1)创建MEX文件 mcc –x filename (注意这个命令在2008a中已经去掉了) 将M文件filename.m翻译成C代码,并生成一个可被Matlab直接调用的C的MEX。 (2)创建simulink S函数 mcc –s filename 将M文件filename.m翻译成C代码,并生成一个相应的simulink S函数,该函数的输入输出变量的大小可动态改变。 (3)创建可独立执行的C程序 mcc –m filename 将M文件filename.m翻译成C代码,生成的可执行文件能独立于Matlab运行环境。 (4)创建可独立运行的C++程序 mcc –p filename 将M文件filename.m翻译成C++代码,生成的可执行文件能独立于Matlab运行环境。 (5)创建可独立运行的C图形库函数 mcc –B sgl filename 如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C语言,并生成一个能独立于Matlab运行环境的可执行程序。 (6) 创建可独立运行的C++图形库函数 mcc –B sgl cpp filename 如果filename.m中包含了对Matlab图形处理函数的调用,上述命令,将filename转换成为C++语言,并生成一个能独立于Matlab运行环境的可执行程序。 (7)创建C函数库 mcc –m –W lib:libfoo –T link:libfoo.m 创建一个C函数库 二 mex命令 用户可以在Matlab中按简单的M文件语法规则设计出来完成特定计算的算法。然后用 Matlab编译器调用mex命令创建C共享库函数(DLL)或C++静态函数库 ,最后将它们整合到C/C++应用程序中,编译完这些C/C++应用程序,就可以用这些算法来实现特定的计算功能。当然这过程中也隐藏了算法和加快了代码的执行效率。 由于MEX文件执行效率高,故如果有文件重名的话,Matlab将优先调用MEX文件 ,下面以一个例子说明: function theimage=gasket(numpoits) theimage=zeros(1000); corners= ; startpoit= ; therand=ceil(rand(numpoits,1)*3); for ii=1:numpoits startpoit=floor((corners(therand(ii),:)+startpoit)/2); theimage(startpoit(1),startpoit(2))=1; end imagesc(theimage) colormap( ); axis equal tight 复制代码 现在直接调用 tic ,gasket(5000000);toc Elapsed time is 7.240129 seconds. 复制代码 接着把它编译成mex文件在调用试试 mcc -p tic gasket;tic ,gasket(5000000);toc Elapsed time is 1.23861 seconds. 复制代码 三 mbuild命令 要建立独立运行的C应用程序,系统中需要 安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数 。 Matlab编译器使用 mbuild命令可以直接将C/C++源代码编译为独立运行程序 ,在这些源代码中可以使用Matlab提供的接口来调用Matlab数学库函数。 虽然生成的 可执行程序可以脱离Matlab环境运行,但是它需要Matlab C/C++数学库文件或者图形库文件的支持才能运行 。但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调用,则不仅可以独立与Matlab环境,也不需要那两个库函数的支持。 对于如何在其他环境中运行那个生成的exe文件,大家看看这个帖子: http://www.matlabsky.com/thread-543-1-1.html 下面说说一些比较和区别: 1. MEX文件和EXE文件的差别 Mex文件与Matlab解释器在同一个过程空间运行,当用户调用一个MEX文件时Matlab解释器就会动态的连接到MEX文件。 可独立运行的C/C++应用程序(exe)可以独立于Matlab环境而运行, 而MEX文件则不行,它需要Matlab的支持 。还有EXE中可以调用MEX文件。 2.mex和mbuild编译的C/C++文件的差别 使用mbuild命令编译的C/C++源文件中, 必须包含main()函数 ,它能独立于Matlab运行。而mex命令编译的C/C++源文件中不含main()函数, 它是以mexfunction()函数作为入口的 ,编译后生成的是mex文件,被Matlab调用。 下面是我的一些使用心得 由于真正掌握C/C++接口编程比较麻烦, 故对初学者较少直接使用mex命令 (花费那么大的精力去学习那些接**术,接着利用接**术编写C/C++文件,再使用mex命令来编译它),一般大家都是先写好M文件再使用mcc –x命令让它生成MEX (DLL)文件。 但对纯正的C/C++大家却都比较熟悉,故mbuild命令还是有些市场的
个人分类: 程序设计|4843 次阅读|0 个评论
f2py使用不同编译器的执行语句
pcabaqus 2011-6-16 17:00
C/C++编译器采用Microsoft Visual Studio,Fortran编译器采用Compaq Visual Fortran 6时 f2py -c XX.f90 -mXX --fcompiler=Compaqv --compiler=msvc C/C++编译器采用MingW32,Fortran编译器采用gFortran时 f2py -c XX.f90 -mXX --fcompiler=gfortran --compiler=mingw32
个人分类: 编制程序|4892 次阅读|0 个评论
[转载]Model-based Compiler Compiler 基于模型的编译器的编译器
geneculture 2011-6-15 10:36
[转载]Model-based Compiler Compiler 基于模型的编译器的编译器
http://www.modelcc.org/ http://www.modelcc.org/ http://www.modelcc.org/ Compiler http://en.wikipedia.org/wiki/Compiler
1 次阅读|7 个评论
老旧C语言编译器解决了一个大问题
热度 6 chrujun 2011-5-22 09:55
现在很少有人在台式机上用BORLAND C语言编译器,一般用微软的C语言编译器。然而,最近的一件事情使我的对老旧的BORLAND C语言编译器括目相待。 我从网上下载了3个C语言源文件,一个是主程序文件、一个是子程序文件、第三个是头文件。在Microsoft Visual Studio .NET 2003中建立C/C++项目后,导入这三个文件编译,出现了200多个警告和200多个错误!仔细分析源代码后,发现源代码没有什么问题。 试着做了一些改动,但无济于事。我确信这个微软的C语言编译器有大问题。 怎么办? 我首先想用LINUX操作系统的C语言编译器,但一想到程序需要在LINUX下运行,要处理的数据需要从WINDOWS折腾到LINUX,很麻烦,还是放弃了。 最后,我想到了DOS下的一些老旧的C语言编译器,估计能够解决问题。幸好我电脑里有BORLAND C编译器和集成开发环境。建立项目,将源程序和头文件导入后,发现编译能够通过,只出现了6个警告,但程序运行结果不对。我估计是源程序的int 和BORLAND C编译器的int类型长度不一致导致的问题。 源程序中的int是32位,而BORLAND C中的int是16位。 因此,对原有的程序做了如下修改: 1.把源程序中的int全部修改成long int。 2.对于源程序中的short int,不做修改。 修改后,得到了正确的输出结果。 再通过一个上午修改,终于让程序能够处理我的数据,解决了项目中的一个关键问题。
个人分类: 地球物理及仪器|7234 次阅读|13 个评论
[转载]VC内存泄露处理方法
pfyang 2011-5-17 23:30
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。 常见的内存错误及其对策如下: * 内存分配未成功,却使用了它。 编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行 检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。 * 内存分配虽然成功,但是尚未初始化就引用它。 犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例如数组)。 内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。 * 内存分配成功并且已经初始化,但操作越过了内存的边界。 例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。 * 忘记了释放内存,造成内存泄露。 含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。 动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。 * 释放了内存却继续使用它。 有三种情况: (1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。 (2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。 (3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。 【规则1】用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。 【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。 【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。 【规则4】动态内存的申请与释放必须配对,防止内存泄漏。 【规则5】用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针
4393 次阅读|0 个评论
[转载]vasp学习笔记:安装案例1
forestgl 2011-4-25 21:53
单机4核(intel core2 quard)32位vasp并行安装 本人同时在小木虫上发了此贴,非转载他人,若转载请注明出处作者abcasi 原创 单机4核(intel core2 quard)32位vasp并行安装 采用IFC编译器,MKL数据库mpich2-1.0.8对VASP编译的过程 1. 准备 系统为suse linux enterprise Desktop service Pack2 For x86 VASP源代码(vasp.4.6.tar.gz和vasp.4.lib.tar.gz),mkl数据库 (l_mkl_p_9.1.023.tar),ifc编译器(l_fc__pl_9.1.036.tar.gz),mpich2-1.0.8。我们将以上 安装所需文件都放在/root/vasp目录下并解压。测试成功效率在95%以上 2. Ifc编译器安装 先解压tar –zxvfl_fc_c_9.1.036.tar.gz 得到l_fc_c_9.1.036.文件夹 进入l_fc__pl_9.1.036文件夹找到install.sh文件 执行./install.sh开始安装ifc,安装过程都选用默认的路径(/opt/intel/fc/9.1.036)安装 安装完毕,进入/opt/intel/fc/9.1.036/bin目录 执行cp ifort /bin ifc安装完成 3. mkl的安装 进入l_mkl_p_9.1.023.tar所在目录 tar –zxvf l_mkl_p_9.1.023.tar 进入解压得到的目录l_mkl_p_9.1.023 进入install文件夹,可以看到一个可执行的文件install ./install.sh 默认安装即可,默认目录为/opt/intel/mkl/9.1.023 三 ,设置环境变量 编辑root下的 .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' PATH="$PATH:/usr/local/bin" (安装mpich2要添加的路径) # Source global definitions if ; then . /etc/bashrc fi export LD_LIBRARY_PATH=/opt/intel/mkl/9.1.023/lib/32:/opt/intel/fc/9.1.036/lib . /opt/intel/fc/9.1.036/bin/ifortvars.sh (新添加路径) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/9.1.023/lib/32 (新添加路径) 二、安装MPICH2(在节点root目录下) 1、解压缩 #tar -zxvf mpich2-1.0.1.tar.gz 或者 #gunzip -c mpich2-1.0.1.tar.gz|tar xf mpich2-1.0.1.tar 2、创建安装目录 #mkdir /usr/MPICH-instsll 3、进入mpich2解压目录 #cd mpich2-1.0.1 4、默认安装目录 #./configure 5、编译 #make 6、安装 #make install 7、退出到root目录 #cd .. 8、通过编辑.bashrc文件修改环境变量 #vi .bashrc 修改后的.bashrc文件如下: # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' PATH="$PATH:/usr/local/bin" (新增加的mpich2的路径) #Source global definitions if ; then . /etc/bashrc fi export LD_LIBRARY_PATH=/opt/intel/mkl/9.1.023/lib/32:/opt/intel/fc/9.1.036/lib . /opt/intel/fc/9.1.036/bin/ifortvars.sh (新添加路径) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/9.1.023/lib/32 (新添加路径) 9、测试环境变量设置 #which mpd #which mpicc #which mpiexec #which mpirun 10、修改/etc/mpd.conf文件,添加内容为secretword=myword #vi /etc/mpd.conf 添加 secretword=myword 设置文件读取权限和修改时间 #touch /etc/mpd.conf #chmod 600 /etc/mpd.conf 1、本地测试 #mpd 启动 #mpdtrace 观看启动机器 #mpdallexit 退出 三。 6.进入vasp.4.lib所在目录 cd /root/vasp/vasp.4.lib cp makefile.linux_ifc_P4 makefile 根据自己机子的情况选择合适的makefile 编辑makfile 19行的FC=ifc 修改为 FC=ifort make 如果编译通过,说明前面安装的数学库和编译器等都是正确的 7.进入vasp.4.6所在目录 cd/root/vasp/vasp.4.6 cp makefile.linux_ifc_P4 makefile 编辑 makefile 对makefile做如下修改: 50行, 52行 前加# 80行前加 # 128行 的#BLAS=-L/opt/intel/mkl/lib/32 -lmkl_p4-lpthread 修改为 BLAS=-L/opt/intel/mkl/9.1.023/lib/32 -lmkl_p4 -lsvml -lvml -lguide -lpthread 136行前加 # 145 行 的 #LAPACK= -lmkl_lapack 修改為LAPACK= -lmkl_lapack 或 LAPACK=-L/opt/intel/mkl/9.1.023/lib/32 -lmkl_lapack -lsvml -lvml -lguide –lpthread 也可以 149行 前 加 # 166行 前 加 # 201行 的 #FC=mpif77 修改為 FC=mpif90 202行的 #FCL=$(FC) 修改為 FCL=$(FC) 211-214行 前面的 # 去掉 修改為 CPP = $(CPP_) -DMPI-DHOST=\"LinuxIFC\" -DIFC \ -Dkind8 -DNGZhalf -DCACHE_SIZE=4000 -DPGF90 -Davoidalloc \ -DMPI_BLOCK=500\ -DRPROMU_DGEMV-DRACCMU_DGEMV 224行 前 加 # 227行 前 加 # 233-235行 前 的# 去掉 238行 前 的 # 去掉 343行 的-e95去掉 保存退出后 编译make 编译通过则 cp vasp /bin 在任何目录下vasp命令都可以调用了 这时编译的vasp只能在root用户下使用 四.重启电脑,以普通用户(XXX代表普通用户名)的身份登陆 1. 进入 /home/XXX目录找到隐藏的.bashrc文件(在窗口的工具栏中点击“查看”,选择显示隐藏文件) .bashrc 文件如下 # Sample .bashrc for SuSE Linux # Copyright (c) SuSE GmbH Nuernberg # There are 3 different types of shells in bash: the login shell, normal shell # and interactive shell. Login shells read ~/.profile and interactive shells # read ~/.bashrc; in our setup, /etc/profile sources ~/.bashrc - thus all # settings made here will also take effect in a login shell. # # NOTE: It is recommended to make language settings in ~/.profile rather than # here, since multilingual X sessions would not work properly if LANG is over- # ridden in every subshell. # Some applications read the EDITOR variable to determine your favourite text # editor. So uncomment the line below and enter the editor of your choice :-) #export EDITOR=/usr/bin/vim #export EDITOR=/usr/bin/mcedit # For some news readers it makes sense to specify the NEWSSERVER variable here #export NEWSSERVER=your.news.server # If you want to use a Palm device with Linux, uncomment the two lines below. # For some (older) Palm Pilots, you might need to set a lower baud rate # e.g. 57600 or 38400; lowest is 9600 (very slow!) # #export PILOTPORT=/dev/pilot #export PILOTRATE=115200 test -s ~/.alias . ~/.alias || true 修改后变为 # Sample .bashrc for SuSE Linux # Copyright (c) SuSE GmbH Nuernberg # There are 3 different types of shells in bash: the login shell, normal shell # and interactive shell. Login shells read ~/.profile and interactive shells # read ~/.bashrc; in our setup, /etc/profile sources ~/.bashrc - thus all # settings made here will also take effect in a login shell. # # NOTE: It is recommended to make language settings in ~/.profile rather than # here, since multilingual X sessions would not work properly if LANG is over- # ridden in every subshell. # Some applications read the EDITOR variable to determine your favourite text # editor. So uncomment the line below and enter the editor of your choice :-) #export EDITOR=/usr/bin/vim #export EDITOR=/usr/bin/mcedit # For some news readers it makes sense to specify the NEWSSERVER variable here #export NEWSSERVER=your.news.server # If you want to use a Palm device with Linux, uncomment the two lines below. # For some (older) Palm Pilots, you might need to set a lower baud rate # e.g. 57600 or 38400; lowest is 9600 (very slow!) # #export PILOTPORT=/dev/pilot #export PILOTRATE=115200 test -s ~/.alias . ~/.alias || true 以下为增加内容 export LD_LIBRARY_PATH=/opt/intel/mkl/9.1.023/lib/32:/opt/intel/fc/9.1.036/lib . /opt/intel/fc/9.1.036/bin/ifortvars.sh (新添加路径) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/9.1.023/lib/32 (新添加路径) 保存, 2. 配置mpd 在普通用户下 执行 cd $HOME vi .mpd.conf 添加 MPD_SECRETWORD=mr45-j9z 保存, 设置文件读取权限和修改时间 touch .mpd.conf chmod 600 .mpd.conf 设置完成。 上述编译通过的vasp还不能运行,会提示找不到目标文件libsvml.so 1.locate libsvml.so可以找到libsvml.so所在目录/opt/intel_fc_80/lib中 2.在root目录下找到.bash_profile和.bashrc文件(ls –a 显示当前目录下所有内容 3.在root目录下运行env看环境变量LD_LIBRARY_PATH是否为 LD_LIBRARY_PATH=/opt/intel/mkl/8.0.2/lib/32: /opt/intel/fce/9.1.036/lib 若不是则执行如下命令 export LD_LIBRARY_PATH=/opt/intel/mkl/8.0.2/lib/32: /opt/intel/fce/9.1.036/lib 4.reboot后即可以使用vasp 计算了
5013 次阅读|0 个评论
SML学习历程 待续
jiangdm 2011-4-18 09:55
我想若从形式化角度研究WSN/DSN协议,形式语义是必不可少的工具,而形式语义与Functional Languages关系密切,所以我准备2周时间学习一下SML。条件有限,OS为Windows,书采用了L.C.Paulson《ML for the Working Programmer》,中文版是柯韦译的《ML程序设计教程》,编译器为SML/NJ。以后可加装Debain Linux,真怀念我原来配置的Debain 5.0系统! 1。如何编译SML文件? notes-011001.pdf A:SML多采用行命令编译方式,用惯了C(Gnu Linux / Windows),特不适应SML行命令方式,主要是不宜于调试。只好读其指南,看看有方法简化编译: 引自《Notes on Programming Standard ML of New Jersey》一书: 建立foo.sml 文件: fun double (x:int):int = 2 * x; fun square (x:int):int = x * x; fun power (x:int,y:int):int = if (y=0) then 1 else x * power (x,y-1); 获取当前工作目录: OS.FileSys.getDir: - OS.FileSys.getDir (); 修改 - OS.FileSys.chDir /home/riccardo/work/sml; 例如: foo.sml在C盘 设置 - OS.FileSys.chDir C:\\; - use foo.sml; sml-tutorial.pdf Standard ML http://en.wikipedia.org/wiki/Standard_ML#References Alice ML: http://www.ps.uni-saarland.de/alice/
个人分类: Formal method|5674 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-11 05:07

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部