MPICH2+Eclipse开发环境的配置小结

MPICH2Eclipse开发环境的配置小结

烤鱼片(@eii.dlmu)

cleverysm@163.com

 

MPICH2MPIMessage-Passing Interface)的一个应用实现,支持C/C++Fortran,同时有linuxwindows版,因此,只要是程序里没有与系统相关的代码,同样的程序基本上就可以跨平台使用。我就是在windows下写程序,然后拿到linux下测试。因为还是觉得没有ide用的不爽,所以就在两个平台下都用了Eclipse+CDT。今天就总结一下两个平台下配置开发环境的方法。

 

Windows

       为了两个系统下保持一致,所以在windows平台下没有用VC,而是用的MinGW作为编译器,MinGW的下载页面在http://mingw.sourceforge.net/download.shtml,大家可以只下载MinGW-5.0.2.exegdb-5.2.1-1.exeMinGW-5.0.2.exe很小,启动这个程序会到网络上下载你要安装的程序,我们这里只需要在安装的过程中选择g++make文件下载安装就可以了,但是调试用的gdb不在里面,需要单独下载,也就是gdb-5.2.1-1.exeMinGW的默认安装路径是C:/MinGW,安装完MinGW后需要执行gdb-5.2.1-1.exe,将gdb安装到MinGW安装的路径中。然后,将MinGW目录下的bin目录里的mingw32-make.exe改名为make.exe,最后要为eclipse写几个环境变量,分别是:

PATH = C:/MinGW/bin;%PATH%

LIBRARY_PATH = C:/MinGW/lib

C_INCLUDE_PATH = C:/MinGW/include

CPLUS_INCLUDE_PATH = C:/MinGW/include/c++/ 3.4.2 ;C:/MinGW/include/c++/3.4.2/mingw32;C:/MinGW/include/c++/3.4.2/backward;C:/MinGW/include

出现文件路径的地方根据MinGW安装的位置和具体版本号来修改即可。http://download1.csdn.net/down3/20070606/06110041280.JPG

      

       为了能使用Eclipse,首先得安装JDK,这个没什么可说的,到sun.com下载一个安装程序,一路nextok了。Eclipsehttp://www.eclipse.org/下,解压开压缩包就能用。但要开发C/C++程序,还需要eclipse的插件CDT,还是到http://www.eclipse.org/上下载,解开压缩包。把featuresplugins里的东西拷贝到eclipse下的featuresplugins里就可以,重新启动eclipse,如果能在新建项目里看到CC++项目,就说明插件安装成功了,如果没有的话,就到eclipse的目录下的configuration目录里,把org.eclipse.update这个文件夹删掉,重启eclipse应该就能用。

       Eclipse里的C/C++项目分两种,managedstandardManaged不需要自己写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 targetsEclipse里就会出现一个make targetsview窗口,我的是在右侧,有时候也可能是在下面出现,使用的时候可以根据习惯任意拖放,然后鼠标右键点刚才建立的项目,选择add make target

创建一个新的make目标all

点击Create后在make targetsview里就会出现一个all目标。

直接双击all就能开始编译项目了。如果在consoleproblemview里没有错误提示的话,就会在项目里出现一个main.exe的目标程序。

main.exe的右键菜单里选择Run as-Run local c/c++ application就能在console里看到运行的结果了。如果需要调试程序的话,就在编译指令中加-g,如g++ -g main.cpp -o main.exe

 

要开发MPI程序,还需要MPI的头文件和库文件,分别在MPICH2的安装目录下的includelib目录中。本来按理说,在eclipse项目的属性下的include pathproject path里分别填上inlude文件和lib文件的路径就应当可以用,但是我的eclipse却怎么也不好使,说是找不到头文件,也没法链接,所以只好在makefile里动手脚,在g++的编译命令里直接加上头文件和库文件的路径。指定头文件路径用-I命令,如我将include文件放置在项目文件夹下的./mpich2/include中,编译指令就是g++ -I./mpich2/include -c main.cpp,注意I和路径之间没有空格。Lib文件同样是在用编译指令中指定,windows下需要cxxd.libcxx.libmpi.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

 

LinuxEclipse的使用方法基本与windows下一致,只是JDK的安装有点不同。到sun.com上下载jdkbin文件,如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/jdk 1.5.0 _07

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar

export 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.solibrt.soglibc中对real-time部分的支持库。用于提升系统的I/O性能。解决方法是编译指令中加-lrt,如g++ -lrt main.cpp -o main.exe

 

 

 

 

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值