MPICH2+Eclipse开发环境的配置小结.docx
-
资源ID:1894200
资源大小:144.29KB
全文页数:8页
- 资源格式: DOCX
下载积分:16金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
MPICH2+Eclipse开发环境的配置小结.docx
MPICH2Eclipse开发环境的配置小结烤鱼片(eii.dlmu)cleverysm MPICH2是MPI(Message-Passing Interface)的一个应用实现,支持C/C+和Fortran,同时有linux和windows版,因此,只要是程序里没有与系统相关的代码,同样的程序基本上就可以跨平台使用。我就是在windows下写程序,然后拿到linux下测试。因为还是觉得没有ide用的不爽,所以就在两个平台下都用了Eclipse+CDT。今天就总结一下两个平台下配置开发环境的方法。 Windows 为了两个系统下保持一致,所以在windows平台下没有用VC,而是用的MinGW作为编译器,MinGW的下载页面在PATH = C:MinGWbin;%PATH%LIBRARY_PATH = C:MinGWlibC_INCLUDE_PATH = C:MinGWincludeCPLUS_INCLUDE_PATH = C:MinGWincludec+3.4.2;C:MinGWincludec+3.4.2mingw32;C:MinGWincludec+3.4.2backward;C:MinGWinclude出现文件路径的地方根据MinGW安装的位置和具体版本号来修改即可。 为了能使用Eclipse,首先得安装JDK,这个没什么可说的,到下载一个安装程序,一路next就ok了。Eclipse到http:/www.eclipse.org/下,解压开压缩包就能用。但要开发C/C+程序,还需要eclipse的插件CDT,还是到http:/www.eclipse.org/上下载,解开压缩包。把features和plugins里的东西拷贝到eclipse下的features和plugins里就可以,重新启动eclipse,如果能在新建项目里看到C和C+项目,就说明插件安装成功了,如果没有的话,就到eclipse的目录下的configuration目录里,把org.eclipse.update这个文件夹删掉,重启eclipse应该就能用。 Eclipse里的C/C+项目分两种,managed和standard。Managed不需要自己写makefile,而standard需要手动写makefile。因为感觉managed不如standard灵活,所以我是用的standard项目,可以根据需要来定制自己的makefile。现在我们来创建一个新的C+项目,从菜单Filenew里选择建立Standard MakeC+项目,一般除了项目名外只需要在binary parser里改为PE Windows Parser。 然后,添加一个源代码文件,main.cpp,在里面写上#include <iostream>using namespace std;int main(int argc, char *argv) cout<<"Hello World!"<<endl; return 0; 向项目中添加一个文件,起名就叫makefile,然后在makefile里写上all:main.cpp g+ main.cpp -o main.exe注意第二行前面的空白部分是一个制表符,也就是Tab键,而不能是空格。Makefile的书写方式就不多说了,感兴趣的话还是找专门的教程来看吧。 然后回到eclipse的菜单,window-show view-make targets。Eclipse里就会出现一个make targets的view窗口,我的是在右侧,有时候也可能是在下面出现,使用的时候可以根据习惯任意拖放,然后鼠标右键点刚才建立的项目,选择add make target创建一个新的make目标all点击Create后在make targets的view里就会出现一个all目标。直接双击all就能开始编译项目了。如果在console和problem的view里没有错误提示的话,就会在项目里出现一个main.exe的目标程序。在main.exe的右键菜单里选择Run as-Run local c/c+ application就能在console里看到运行的结果了。如果需要调试程序的话,就在编译指令中加-g,如g+ -g main.cpp -o main.exe 要开发MPI程序,还需要MPI的头文件和库文件,分别在MPICH2的安装目录下的include和lib目录中。本来按理说,在eclipse项目的属性下的include path和project path里分别填上inlude文件和lib文件的路径就应当可以用,但是我的eclipse却怎么也不好使,说是找不到头文件,也没法链接,所以只好在makefile里动手脚,在g+的编译命令里直接加上头文件和库文件的路径。指定头文件路径用-I命令,如我将include文件放置在项目文件夹下的./mpich2/include中,编译指令就是g+ -I./mpich2/include -c main.cpp,注意I和路径之间没有空格。Lib文件同样是在用编译指令中指定,windows下需要cxxd.lib,cxx.lib,mpi.lib,其中cxxd.lib是用于调试,如果lib文件是放在./mpich2/lib中,指令中需要添加-L./mpich2/lib lcxxd lmpi,-L表示lib文件的位置,-l是具体要链接的库名。完整的命令如g+ main.cpp -I./mpich2/include -L./mpich2/lib -lcxxd -lmpi -o main.exe在编译MPI程序的时候可能会提示在mpicxx.h中有错误,问题出在下面这段代码里,具体什么意思我也不太明白,但是察看linux版的同一文件的同一位置并没有这段代码,所以可以将这段注释调,就可以正常通过编译,似乎对程序没什么影响。#ifdef _GNUC_ # if _GNUC_ >= 0 # if _GNUC_MINOR_ > 2 && 0 = 2 # error 'Please use the same version of GCC for compiling MPICH2 and user MPI programs'# endif# endif #endif另外还要在#include <mpi.h>之前加上#undef SEEK_SET#undef SEEK_END#undef SEEK_CUR以避免MPI-2中的一个bug,不然的话编译器会报错,或者在编译命令的命令行里加上-DMPICH_IGNORE_CXX_SEEK。 Linux Linux下Eclipse的使用方法基本与windows下一致,只是JDK的安装有点不同。到上下载jdk的bin文件,如jdk-1_5_0_07-linux-i586.bin,添加这个文件的可执行属性,chmod a+x jdk-1_5_0_07-linux-i586.bin,然后就可以执行这个文件./jdk-1_5_0_07-linux-i586.bin,这样JDK就会将文件解压缩到bin文件存放的当前目录,目录名应为jdk-1_5_0_07,然后将这个文件夹拷贝到作为JDK目录的位置,比如我就是放在/usr/java下。这样JDK的安装目录就是/usr/java/jdk-1_5_0_07,再就是添加环境变量,以root用户编辑/etc/profile,在文件中添加如下三行,保存并重启export JAVA_HOME=/usr/java/jdk1.5.0_07export CLASSPATH=.:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/bin:$PATH这样JDK就安装好了,不出意外的话eclipse就能正常使用了。 关于include路径和lib链接的问题也与windows下类似,linux下需要链接的库是-lmpich,如g+ -lmpich main.cpp -o main.exe。 Linux下开发MPI的时候可能会遇到几个问题。第一个也是#undef SEEK_SET#undef SEEK_END#undef SEEK_CUR的问题,把这几行放到#include <mpi.h>之前就行。第二个可能会在编译链接的时候提示诸如undefined reference to pthread_getspecific'的错误,这是MPI用到了线程功能,解决方法是编译的时候添加-lpthread,如g+ -lpthread main.cpp -o main.exe第三个问题是可能会遇到诸如./libmpich.a(ad_iwrite.o)(.text+0x155): In function ADIOI_GEN_aio': undefined reference to aio_write64'的错误,这是我在使用MPIP-2的并行I/O功能的时候碰到的,也是在链接的时候缺一个库/usr/liblibrt.so。librt.so是glibc中对real-time部分的支持库。用于提升系统的I/O性能。解决方法是编译指令中加-lrt,如g+ -lrt main.cpp -o main.exe。