Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在群集上安装R包时出现奇怪的C编译器错误_C_R_Package_Mpi - Fatal编程技术网

在群集上安装R包时出现奇怪的C编译器错误

在群集上安装R包时出现奇怪的C编译器错误,c,r,package,mpi,C,R,Package,Mpi,--我能够解决这个问题,请参见下面的最后一次编辑--- 我正试图在我的研究所的计算集群上使用R。对于并行计算问题,我想安装snow和Rmpi包。因此,我下载了tar.gz文件并尝试安装pacakges,对于snow,它工作得很好,但是对于Rmpi,发生了一些奇怪的事情: 我首先做的是: install.packages("/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz", repos = NULL, type = "source", lib = "/ho

--我能够解决这个问题,请参见下面的最后一次编辑---

我正试图在我的研究所的计算集群上使用R。对于并行计算问题,我想安装snow和Rmpi包。因此,我下载了tar.gz文件并尝试安装pacakges,对于snow,它工作得很好,但是对于Rmpi,发生了一些奇怪的事情:

我首先做的是:

install.packages("/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz", repos = NULL, type = "source", lib = "/home/myusername/Rpackages/")
* installing *source* package ‘Rmpi’ ...
** Paket ‘Rmpi’ erfolgreich entpackt und MD5 Summen überprüft
checking for gcc... gcc -m64 -std=gnu99
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -m64 -std=gnu99 accepts -g... yes
checking for gcc -m64 -std=gnu99 option to accept ISO C89... none needed
Trying to find mpi.h ...
Cannot find mpi.h header file
Please use --with-mpi=/path/to/mpi or specify the environment variable MPI_ROOT
ERROR: configuration failed for package ‘Rmpi’
* removing ‘/home/myusername/Rpackages/Rmpi’
好的,所以mpi.h似乎丢失了,我做了一些搜索并找到了要做的事情:指定mpi库的路径:

> install.packages("/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz", repos = NULL, type = "source", lib = "/home/myusername/Rpackages/", configure.args="--with-mpi=/cm/local/modulefiles/openmpi/gcc/64/1.6.3" )
* installing *source* package ‘Rmpi’ ...
** Paket ‘Rmpi’ erfolgreich entpackt und MD5 Summen überprüft
checking for gcc... gcc -m64 -std=gnu99
checking whether the C compiler works... no
configure: error: in `/tmp/Rtmp9qZ8QA/R.INSTALLad327c257ce2/Rmpi':
configure: error: C compiler cannot create executables
See `config.log' for more details

ERROR: configuration failed for package ‘Rmpi’
* removing ‘/home/myusername/Rpackages/Rmpi’
Warnmeldung:
In install.packages("/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz",  :
  Installation des Pakets ‘/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz’ hatte Exit-Status ungleich 0
所以现在没有mpi.h错误,但是C编译器似乎不工作,尽管它以前工作过,我只是在install.packages函数中更改了mpi选项

这里出了什么问题?如何安装软件包


编辑2:在获得一些帮助后,我找到了如何查找mpi文件的位置,并执行了以下操作:

install.packages("/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz", repos = NULL, type = "source", lib = "/home/myusername/Rpackages/", configure.args=c("--with-Rmpi-libpath=/usr/mpi/gcc/openmpi-1.6.3/lib64/","--with‌​-Rmpi-type=OPENMPI", "--with-Rmpi-include=/usr/mpi/gcc/openmpi-1.6.3/include/") )
但是,这仍然不起作用,我得到以下错误:

* installing *source* package ‘Rmpi’ ...
** Paket ‘Rmpi’ erfolgreich entpackt und MD5 Summen überprüft
checking for openpty in -lutil... no
checking for main in -lpthread... no
configure: creating ./config.status
config.status: creating src/Makevars
** libs
gcc -m64 -std=gnu99 -I/usr/include/R -DNDEBUG -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -I/usr/mpi/gcc/openmpi-1.6.3/include/  -DMPI2 -DOPENMPI -I/usr/local/include    -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic  -c Rmpi.c -o Rmpi.o
Rmpi.c: In Funktion »mpi_bcast«:
Rmpi.c:605:2: Fehler: unbekannter Typname: »R_xlen_t«
make: *** [Rmpi.o] Fehler 1
ERROR: compilation failed for package ‘Rmpi’

编辑3:我想出了一个解决问题的办法,由于信息不完整,我想这里没有人能找到。在集群上,R仅安装在版本2.15.2中,但RMPI0.6-5是为R3.0.0或更高版本构建的。Rmpi包中的R版本依赖项指定错误。我下载了一个旧版本(Rmpi 0.6-1),并能够安装这个版本。

我在Ubuntu中安装了libopenmpi dev,并尝试在Rstudio中安装Rmpi。成功了

问题是,如果找不到库,它就无法编译R-package。解决办法是

$ sudo apt-get install libopenmpi-dev
然后重新打开R,安装应该可以工作

R> install.packages('Rmpi')

您确定文件夹
/cm/local/modulefiles/openmpi/gcc/64/1.6.3/
包含整个MPI安装吗?通常MPI不会安装到ModuleFile配置中。运行
locate mpi.h
locate mpirun
查找实际安装mpi的目录。不,我不确定哪个文件夹实际包含mpi安装,我也不确定是否可以访问此文件夹。
locate mpi.h
locate mpirun
都不返回任何东西运行
模块列表
,然后查找对应于为gcc编译的openmpi 1.6.3的条目(例如
openmpi/1.6.3
)。选择该条目并运行
模块加载openmpi/1.6.3
(模块名称可能不同)。然后
哪个mpirun
应该告诉您openmpi的安装位置。因此,有了可用的
模块
我找到了这个:
openmpi/gcc/64/1.6.3
,然后通过
模块加载/cm/local/modulefiles/openmpi/gcc/64/1.6.3
加载它,该模块也显示在
模块列表
之后
哪个mpirun
返回了
/usr/mpi/gcc/openmpi-1.6.3/bin/mpirun
,所以我尝试在Rmpi包安装中使用它:
install.packages(/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz),repos=NULL,type=“source”,lib=“/home/myusername/Rpackages/”,config.args=“--with-with-mpi=/usr/mpi/gcc/Rpackages/pi-1.6.3/bin/mpirun”)
,编译器现在可以工作了,但是再次声明,
mpi.h
找不到,我无法编辑我以前的注释。所以我意识到了可能的错误,我这样做了:
install.packages(“/home/myusername/Rpackages/Rmpi_0.6-5.tar.gz”,repos=NULL,type=“source”,lib=“/home/myusername/Rpackages/”,configure.args=c(“--with Rmpi libpath=/usr/mpi/gcc/openmpi-1.6.3/lib64/”,“--with Rmpi type=openmpi”,“--使用Rmpi include=/usr/mpi/gcc/openmpi-1.6.3/include/”)
,但是,我得到以下错误:
Rmpi.c:In Funktion»mpi\u bcast«:Rmpi.c:605:2:Fehler:unbekanner Typname:»R\u xlen\u t«make**[Rmpi.o]Fehler 1错误:包“Rmpi”的编译失败。