2017-02-10 24 views
0

Основная цель - использовать DiffBind (пакет R) для анализа моих данных ChIPseq./usr/bin/ld: не удается найти -lgfortran при установке 'RcppArmadillo' в R

(я нашел another post, который может иметь отношение к моему вопросу, и попытался извлечь из него решения, но я предполагаю, что содержание было слишком «продвинутым» для меня ...)

В соответствии с предложением, что я might need to update my DiffBind Я попытался установить новую версию.

По проверке dependency of DiffBind Я полагаю, что предыдущая установка автоматически установила старую версию DiffBind, потому что мой R не соответствовал требованиям текущей версии DiffBind.

Но я использовал R под корневым каталогом, для которого я не мог много сделать. Поэтому я решил установить более новую версию R под моим собственным каталогом. и я managed to do that.

Затем я попытался установить текущую версию DiffBind, я получил ошибку

ERROR: compilation failed for package ‘RcppArmadillo’ 

Оказалось, что Lib зависимость «RcppArmadillo» требуют более уточненный компилятор, опять же, Я использовал компилятор gcc в корневом каталоге, поэтому я устанавливаю новую версию gcc в свой собственный каталог.

$ gcc --version 

    gcc (GCC) 6.1.0 

    Copyright (C) 2016 Free Software Foundation, Inc. 

    This is free software; see the source for copying conditions. There is NO 

    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

    $ which gcc 

/$HOME/Programme/gcc-6.1.0/bin//gcc 

После этого я попытался установить DiffBind (RcppArmadillo) еще раз, но встретил другую ошибку:

* installing *source* package ‘RcppArmadillo’ ... 
** package 'RcppArmadillo' successfully unpacked and MD5 sums checked 
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 g++ accepts -g... yes 
checking how to run the C++ preprocessor... g++ -E 
checking whether we are using the GNU C++ compiler... (cached) yes 
checking whether g++ accepts -g... (cached) yes 
checking whether g++ version is sufficient... (6.1.0) yes 
checking LAPACK_LIBS... fallback LAPACK from R 3.3.0 or later used 
configure: creating ./config.status 
config.status: creating inst/include/RcppArmadilloLapack.h 
** libs 
g++ -I/$HOME/Programme/R-3.3.1/lib64/R/include -DNDEBUG -I//$HOME/Programme/zlib-1.2.11/include -I//$HOME/Programme/bzip2-1.0.6/include -I//$HOME/Programme/xz-5.2.3/include -I//$HOME/Programme/pcre-8.40/include -I//$HOME/Programme/curl-7.52.1/include -I"/$HOME/Programme/R-3.3.1/lib64/R/library/Rcpp/include" -I../inst/include -fpic -g -O2 -c RcppArmadillo.cpp -o RcppArmadillo.o 
g++ -I/$HOME/Programme/R-3.3.1/lib64/R/include -DNDEBUG -I//$HOME/Programme/zlib-1.2.11/include -I//$HOME/Programme/bzip2-1.0.6/include -I//$HOME/Programme/xz-5.2.3/include -I//$HOME/Programme/pcre-8.40/include -I//$HOME/Programme/curl-7.52.1/include -I"/$HOME/Programme/R-3.3.1/lib64/R/library/Rcpp/include" -I../inst/include -fpic -g -O2 -c RcppExports.cpp -o RcppExports.o 
g++ -I/$HOME/Programme/R-3.3.1/lib64/R/include -DNDEBUG -I//$HOME/Programme/zlib-1.2.11/include -I//$HOME/Programme/bzip2-1.0.6/include -I//$HOME/Programme/xz-5.2.3/include -I//$HOME/Programme/pcre-8.40/include -I//$HOME/Programme/curl-7.52.1/include -I"/$HOME/Programme/R-3.3.1/lib64/R/library/Rcpp/include" -I../inst/include -fpic -g -O2 -c fastLm.cpp -o fastLm.o 
g++ -shared -L/$HOME/Programme/R-3.3.1/lib64/R/lib -L//$HOME/Programme/zlib-1.2.11/lib -L//$HOME/Programme/bzip2-1.0.6/lib -L//$HOME/Programme/xz-5.2.3/lib -L//$HOME/Programme/pcre-8.40/lib -L//$HOME/Programme/curl-7.52.1/lib -o RcppArmadillo.so RcppArmadillo.o RcppExports.o fastLm.o -L/$HOME/Programme/R-3.3.1/lib64/R/lib -lRlapack -L/$HOME/Programme/R-3.3.1/lib64/R/lib -lRblas -lgfortran -lm -L/$HOME/Programme/R-3.3.1/lib64/R/lib -lR 
/usr/bin/ld: cannot find -lgfortran 
collect2: error: ld returned 1 exit status** 

оказалось, что gfortran не может быть найден. , но когда я проверил существование gfortran она существует:

$ which gfortran 

/usr/bin/gfortran 

$ gfortran --version 

GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17) 

Copyright (C) 2010 Free Software Foundation, Inc. 



GNU Fortran comes with NO WARRANTY, to the extent permitted by law. 

You may redistribute copies of GNU Fortran 

under the terms of the GNU General Public License. 

For more information about these matters, see the file named COPYING 

Поэтому я предположил, что НКУ не мог найти gfortran, который находится в корневом каталоге. Как я могу решить проблему? Или может быть, что проблема несоответствия между gcc и gfortran - проблема? если это так, что можно сделать, чтобы обойти это?

Мой R Версия:

> sessionInfo() 
R version 3.3.1 (2016-06-21) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Red Hat Enterprise Linux Server release 6.7 (Santiago) 

locale: 
[1] LC_CTYPE=ja_JP.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=ja_JP.UTF-8  LC_COLLATE=ja_JP.UTF-8  
[5] LC_MONETARY=ja_JP.UTF-8 LC_MESSAGES=ja_JP.UTF-8 
[7] LC_PAPER=ja_JP.UTF-8  LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=ja_JP.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 
+0

Ваш g ++ - версия 6.1, но gfortran очень старый 4.4. Это странно. Если вы установили новый GCC, вы должны установить его полностью, включая часть Fortran. –

+0

@VladimirF. Привет, Владимир. Gfortran установлен в корневом каталоге, а gcc был установлен мной в моем собственном каталоге. Это может объяснить, почему версия g ++ и gfortran не совпадают.Ваш комментарий, казалось, подразумевал, что Fortran будет установлен автоматически, если будут установлены новые GCC. Поэтому, я думаю, я что-то испортил или пропустил некоторые варианты. У вас есть представление об этом? – Jun

+0

Gfortran является частью пакета GCC. Это необязательная часть, но в этом случае вы действительно хотите, чтобы она была включена. Это зависит от способа установки GCC. –

ответ

0

Я думаю, что этот вопрос упоминается здесь был решен. Как упоминал VladimirF в комментариях, когда я установил новую версию gcc, я не включил Fortran, который не является настройкой по умолчанию, поэтому gfortran не был установлен в моих предыдущих попытках.

Я удалил свой предыдущий ССАГПЗ, и повторно скомпилирован следующим образом:

tar -xvf gcc-6.1.0.tar.gz 
cd gcc-6.1.0 
./contrib/download_prerequisites 
mkdir build 
cd build 
../configure --prefix=$HOME/Programme/gcc-6.1.0 --enable-languages=c,c++,fortran --disable-multilib 
make -j 8 
make install 

набора путь для нового GCC и Лива

он работал!