rlinuxstdggiraph

Error when install.package("ggiraph"): "no matching function for call to ‘regex_replace" / RStudio on AWS-Cloud Linux


I'm having this error when trying to install ggiraph in R (RStudio Server on an linux based AWS instance, new RStudio and R versions).

Can't find any advice anywhere for linux systems (only for OS X).

Did anybody encounter the same problem and how did you solve it?

Thank you!

Error message:

dsvg.cpp: In function ‘std::string compile_css(const string&, const char*, const string&, const char*, const char*, const char*)’:
dsvg.cpp:725:46: error: no matching function for call to ‘regex_replace(const char*&, std::regex&, std::string&)’
   return std::regex_replace(css, pattern, cls);
                                              ^
dsvg.cpp:725:46: note: candidates are:
In file included from /usr/include/c++/4.8.2/regex:62:0,
                 from dsvg.cpp:16:
/usr/include/c++/4.8.2/bits/regex.h:2162:5: note: template<class _Out_iter, class _Bi_iter, class _Rx_traits, class _Ch_type> _Out_iter std::regex_replace(_Out_iter, _Bi_iter, _Bi_iter, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
     regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
     ^
/usr/include/c++/4.8.2/bits/regex.h:2162:5: note:   template argument deduction/substitution failed:
dsvg.cpp:725:46: note:   deduced conflicting types for parameter ‘_Bi_iter’ (‘std::basic_regex<char>’ and ‘std::basic_string<char>’)
   return std::regex_replace(css, pattern, cls);
                                              ^
In file included from /usr/include/c++/4.8.2/regex:62:0,
                 from dsvg.cpp:16:
/usr/include/c++/4.8.2/bits/regex.h:2182:5: note: template<class _Rx_traits, class _Ch_type> std::basic_string<_Ch_type> std::regex_replace(const std::basic_string<_Ch_type>&, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
     regex_replace(const basic_string<_Ch_type>& __s,
     ^
/usr/include/c++/4.8.2/bits/regex.h:2182:5: note:   template argument deduction/substitution failed:
dsvg.cpp:725:46: note:   mismatched types ‘const std::basic_string<_Ch_type>’ and ‘const char*’
   return std::regex_replace(css, pattern, cls);
                                              ^
dsvg.cpp:726:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
...
             ^
make: *** [dsvg.o] Error 1
ERROR: compilation failed for package ‘ggiraph’
  removing ‘/home/sandbox/R/x86_64-redhat-linux-gnu-library/3.6/ggiraph’
  restoring previous ‘/home/sandbox/R/x86_64-redhat-linux-gnu-library/3.6/ggiraph’
Error: Failed to install 'ggiraph' from GitHub:
  (converted from warning) installation of package ‘/tmp/RtmpU8zekV/file485f57d349a8/ggiraph_0.7.9.tar.gz’ had non-zero exit status

Solution

  • In my case for this problem, my solution is update the linux GCC version. Type the script on your terminal to update GCC.

    gcc -v            ## to check your gcc version(original centos 7 seems 2.5.4)
    

    and refer to this article to update the developer tool 8 https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/

    On CentOS, install package centos-release-scl available in CentOS repository:

    sudo yum install centos-release-scl
    

    On RHEL, enable RHSCL repository for you system:

    sudo yum-config-manager --enable rhel-server-rhscl-7-rpms
    

    Install the collection:

    sudo yum install devtoolset-8
    

    Start using software collections:

    scl enable devtoolset-8 bash
    

    Check your GCC version is latest:

    gcc -v      #### Now GCC version should be 8.3.1 20190311
    

    Into the R to install ggiraph on terminal:

    sudo R
    

    Install the ggiraph package:

    install.packages('ggiraph', repos='http://cran.us.r-project.org') 
    

    Quit the terminal R

    q() # type "n" to not save workspace image
    

    And switch to rstudio console, library the ggiraph package

    library(ggiraph)
    

    All ggiraph function are able to work now! :D