2

I have the following errors related to cp11. It looks like the cp11 compilation has erros which I'm not sure how to solve.

What I've tried to do is uninstall the package and reinstall it again.

I'm on RHEL 7, gcc version is 4.8.5

> install.packages("tidyverse")
Installing package into ‘/datascience/R/x86_64-redhat-linux-gnu-library/3.6’
(as ‘lib’ is unspecified)
also installing the dependency ‘tidyr’

trying URL 'https://cran.rstudio.com/src/contrib/tidyr_1.1.1.tar.gz'
Content type 'application/x-gzip' length 879411 bytes (858 KB)
==================================================
downloaded 858 KB

trying URL 'https://cran.rstudio.com/src/contrib/tidyverse_1.3.0.tar.gz'
Content type 'application/x-gzip' length 712837 bytes (696 KB)
==================================================
downloaded 696 KB

* installing *source* package ‘tidyr’ ...
** package ‘tidyr’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG  -I"/usr/lib64/R/library/cpp11/include" -I/usr/local/include  -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic  -c cpp11.cpp -o cpp11.o
In file included from /usr/lib64/R/library/cpp11/include/cpp11/as.hpp:8:0,
                 from /usr/lib64/R/library/cpp11/include/cpp11.hpp:5,
                 from /usr/lib64/R/library/cpp11/include/cpp11/declarations.hpp:8,
                 from cpp11.cpp:4:
/usr/lib64/R/library/cpp11/include/cpp11/protect.hpp: In lambda function:
/usr/lib64/R/library/cpp11/include/cpp11/protect.hpp:185:52: error: parameter packs not expanded with ‘...’:
       return unwind_protect_sexp([&] { return ptr_(a...); });
                                                    ^
/usr/lib64/R/library/cpp11/include/cpp11/protect.hpp:185:52: note:         ‘a’
/usr/lib64/R/library/cpp11/include/cpp11/protect.hpp:185:53: error: expansion pattern ‘a’ contains no argument packs
       return unwind_protect_sexp([&] { return ptr_(a...); });
                                                     ^
make: *** [cpp11.o] Error 1
ERROR: compilation failed for package ‘tidyr’
* removing ‘/datascience/R/x86_64-redhat-linux-gnu-library/3.6/tidyr’
Warning in install.packages :
  installation of package ‘tidyr’ had non-zero exit status
ERROR: dependency ‘tidyr’ is not available for package ‘tidyverse’
* removing ‘/datascience/R/x86_64-redhat-linux-gnu-library/3.6/tidyverse’
Warning in install.packages :
  installation of package ‘tidyverse’ had non-zero exit status

The downloaded source packages are in
    ‘/tmp/Rtmp7JHlRI/downloaded_packages’
Afiq Johari
  • 1,372
  • 1
  • 15
  • 28
  • 2
    It might be that your gcc version is too old. Can you post the output of `gcc --version`? – Maurits Evers Aug 07 '20 at 04:07
  • 1
    Re `gcc` versions: [This issue](https://github.com/tidyverse/tidyr/issues/1019) may be related, which in turn links to [this issue](https://github.com/r-lib/cpp11/issues/69). The [advice given by Jim Hester](https://github.com/r-lib/cpp11/issues/69#issuecomment-667981106) is to install a "newer gcc version from the devtoolset-7 software collection". – Maurits Evers Aug 07 '20 at 04:50
  • @MauritsEvers I'm on RHEL 7, gcc version is 4.8.5 – Afiq Johari Aug 07 '20 at 08:46
  • 1
    @MauritsEvers thanks for the issue links. The errors look the same. Unfortunately I don't have permission to freely update this library for a quick verification, but I'll ask the IT team to have it updated so that I can check whether it solves the problem. Thanks Maurits – Afiq Johari Aug 07 '20 at 08:48

3 Answers3

1

A newer version of gcc will compile tidyr properly as stated by @Maurits Evers.

#Enable the rhscl repository
yum-config-manager --enable rhel-server-rhscl-7-rpms

#Install devtooset-X
yum install devtoolset-X

#Open a shell with the required environment variables.
scl enable devtoolset-X bash

Open an R shell after that. In case of using in a non interactive script, source the scl enable file which will set the environment variables in the current shell,

 source /opt/rh/devtoolset-X/enable
Shankar
  • 11
  • 1
1

I am in exactly the same situation: trying to install tidyr on R 3.6.1, having this error in cpp11 and the same version of gcc (4.8.5).

We updated g++, gcc, cc+ cc to version: (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2) Copyright (C) 2019 Free Software Foundation, Inc.

After updating GCC, we reinstalled cpp11.

But:

install.packages(
+   pkgs = "tidyr",
+   dependencies = TRUE,
+   repos = "https://cloud.r-project.org"
+ )
Installing package into ‘/dados/home/t03999/R/x86_64-pc-linux-gnu-library/3.6’
(as ‘lib’ is unspecified)
trying URL 'https://cloud.r-project.org/src/contrib/tidyr_1.1.1.tar.gz'
Content type 'application/x-gzip' length 879411 bytes (858 KB)
==================================================
downloaded 858 KB

* installing *source* package ‘tidyr’ ...
** package ‘tidyr’ successfully unpacked and MD5 sums checked
** using staged installation
** libs
g++ -m64 -std=gnu++11 -I"/usr/lib64/R/../../include/R" -DNDEBUG  -I"/dados/home/t03999/R/x86_64-pc-linux-gnu-library/3.6/cpp11/include" -I/systemr/port/Linux-X64/include/zlib -I/systemr/port/Linux-X64/include/xz -I/systemr/port/Linux-X64/include/bzip2 -I/systemr/port/Linux-X64/include  -fpic  -g -O2  -c cpp11.cpp -o cpp11.o
cpp11.cpp: In function ‘SEXPREC* _tidyr_fillDown(SEXP)’:
cpp11.cpp:10:43: error: ‘unmove’ is not a member of ‘cpp11’
   10 |     return cpp11::as_sexp(fillDown(cpp11::unmove(cpp11::as_cpp<SEXP>(x))));
      |                                           ^~~~~~
cpp11.cpp: In function ‘SEXPREC* _tidyr_fillUp(SEXP)’:
cpp11.cpp:17:41: error: ‘unmove’ is not a member of ‘cpp11’
   17 |     return cpp11::as_sexp(fillUp(cpp11::unmove(cpp11::as_cpp<SEXP>(x))));
      |                                         ^~~~~~
cpp11.cpp: In function ‘SEXPREC* _tidyr_melt_dataframe(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP)’:
cpp11.cpp:24:49: error: ‘unmove’ is not a member of ‘cpp11’
   24 |     return cpp11::as_sexp(melt_dataframe(cpp11::unmove(cpp11::as_cpp<cpp11::data_frame>(data)), cpp11::unmove(cpp11::as_cpp<const cpp11::integers&>(id_ind)), cpp11::unmove(cpp11::as_cpp<const cpp11::integers&>(measure_ind)), cpp11::unmove(cpp11::as_cpp<cpp11::strings>(variable_name)), cpp11::unmove(cpp11::as_cpp<cpp11::strings>(value_name)), cpp11::unmove(cpp11::as_cpp<cpp11::sexp>(attrTemplate)), cpp11::unmove(cpp11::as_cpp<bool>(factorsAsStrings)), cpp11::unmove(cpp11::as_cpp<bool>(valueAsFactor)), cpp11::unmove(cpp11::as_cpp<bool>(variableAsFactor))));
      |                                                 ^~~~~~
cpp11.cpp:24:104: error: ‘unmove’ is not a member of ‘cpp11’

We still don't know how to solve this.

1

I guess the error message

 error: ‘unmove’ is not a member of ‘cpp11’

is caused by the on-going change in the 0.2.0 version of the cpp11 package. This Github issue mentions this problem. The way that solves my problem is installing an older version of cpp11 using the following command in R:

packageurl <- "https://cloud.r-project.org/src/contrib/cpp11_0.1.0.tar.gz"
install.packages(packageurl, repos=NULL, type="source")
KAIWEI TU
  • 11
  • 1
  • FYI I think the URL has changed since you posted this. I was successful with `packageurl <- "https://cran.r-project.org/src/contrib/Archive/cpp11/cpp11_0.1.0.tar.gz"` – pyll Aug 26 '20 at 00:31