- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 8
科学计算程序安装指南(Linux)
在科学研究领域,人们智力活动活跃,产生了众多的成果,其中一部分成果以程序的形式被公布出来,便于传播、使用和继续发展。比如,处理电子与核层面信息的ABINIT( /),处理原子分子层面信息的LAMMPS(/)等等。这些程序的存在,一方面避免了一些基础的重复劳动,从而提高了科学研究的效率;另一方面,由于站在巨人肩上,在它们的基础上人们可以将科研工作进行得更加深入。
然而,由于科研工作的公益性,很多程序是开源的,运行在不同的操作系统(比如Windows、Mac OS、Linux)上,加之一部分科研工作者(比如低年级的同学)只熟悉Windows操作系统的程序安装,使得科研程序的安装成为了利用这些科研程序的拦路虎。由于预编译好的程序安装相对较为简单,大家也非常熟悉,本文不再赘述,而是重点介绍一下在Linux操作系统下,如何从源代码开始得到可执行程序。
一 编译流程
现代程序大多是由高级程序语言写出来的,比如大家熟悉的C、C++、Fortran等等。下面是一段简单的“Hello world”C++程序代码( /wiki/C%2B%2B):
//============================================================================
//文件名称 : HelloWorld.cpp
//描述 : C++写的“Hello World”
//============================================================================
#include iostream
using namespace std;
int main() {
cout ~Hello World~ endl; // 打印~Hello World~
return 0;
}
这些文字代码最终会被保存为文本文件(HelloWorld.cpp)存储在计算机中。这些文本文件就是我们通常意义上所说的一个程序的源代码。
有了源代码文件,计算机还不能识别运行,还必须对文本文件进行进一步处理,才能得到计算机能够执行的可执行文件(比如windows下的exe文件)。这些处理是标准化的,可以由特定的计算机程序(编译器)实现。常见的编译器有GNU编译器套件(GNU Compiler Collection,/),intel编译套件Intel? Parallel Studio XE ( /en-us/intel-parallel-studio-xe/)。这些编译器第一步会把源代码文本文件编译(compile)成中间目标文件(如Windows的.obj 后缀文件;Linux下的 .o 后缀文件)然后再把众多的目标文件链接(link)成可执行文件。
一般来说,源代码文件要变成可执行程序(二进制代码)需要经历如下的流程:
编译器(如GCC等)。
编译器(如GCC等)
因此,从源代码安装任何一个程序,都需要涉及两个要素:
齐全的源代码文件;
合适的编译器。
值得注意的是,由于现代科学计算程序已经十分庞大,比如LAMMPS的源代码文件夹下就有700多个对象,共计30多兆的文本文件,如下图所示:
。如果每一个功能都重头开始写代码,将会是非常浩大的工程。所以,为了避免重复劳动,人们将程序许多常用的功能,比如矩阵运算、快速傅里叶变换、并行计算等功能模块独立出来,事先编译成中间文件(.o),并打包放在计算机中,称为库。在新写一个程序时,就可以直接调用这些库中的模块(函数等),而不必从头再写。出于各种原因,这些标准化的库并不包含在我们所下载到的程序的源代码安装包中,但是它们又是在链接成可执行文件时所必须的。所以,要正确地从源代码开始无错误地安装得到相应的可执行程序实际上涉及到三个要素:
齐全的源代码文件;
合适的编译器;
完备的库环境。
严格来说,要真正理解“从源代码到可执行程序”的原理,需要详细地了解编译原理的细节。但是本文关注的重点在于“由源代码得到可用的计算机程序”,所以编译原理的细节就不那么重要了。读者只需记住,三个要素的内容,然后根据内容一步一步正确地设置相关信息就足够了。
二 自动化编译:makefile的使用
由前面内容可知,有了源代码、库环境以及编译器后,我们就可以参考编译器的命令说明,根据源代码的依赖关系,把源代码编译成可执行程序,比如一个GCC的编译命令如下:
g++ HelloWorld.cpp
。在HelloWorld.cpp的路径下执行完上述命令,就可以生成可执行文件a.out,具体流程及结果如下图所示(终端中bash命令):
。
然而,由于现代程序十
原创力文档


文档评论(0)