Programming/R

[R/CentOS7] CentOS 7에 glmnet 설치 중 "c++17 standard requested but cxx17 is not defined" 에러 해결

김해김씨99대손 2024. 2. 1. 14:14

 

위 에러는 서버에서 C++17을 컴파일 하는 gcc가 없어서 생기는 에러이다. 

 

1시간  넘게 찾다가 https://travis-ci.community/t/error-in-shlib-internal-args-c-17-standard-requested-but-cxx17-is-not-defined/6748/4와 https://arrow.apache.org/docs/11.0/r/articles/install.html에서 해결 방법을 찾았다. 

 

 

1. 빈 shell script를 만든다. 

vi c++17.sh

 

 

2. devtoolset-9버전의 gcc는 C++17의 컴파일이 가능하다

#!/usr/bin/env bash

yum install -y centos-release-scl
yum install -y devtoolset-9
# Optional: also install cloud storage dependencies, as described below
yum install -y libcurl-devel openssl-devel

source /opt/rh/devtoolset-9/enable

if [ ! `R CMD config CXX17` ]; then
  mkdir -p ~/.R
  echo "CC = $(which gcc) -fPIC" >> ~/.R/Makevars
  echo "CXX17 = $(which g++) -fPIC" >> ~/.R/Makevars
  echo "CXX17STD = -std=c++17" >> ~/.R/Makevars
  echo "CXX17FLAGS = ${CXX11FLAGS}" >> ~/.R/Makevars
fi

 

이후 install.package("glmnet") 하였을때 에러가 난다면, 아래 방법을 수행하자.

 

 

3. 그 다음 ~/.R/Makevars 문서를 수정한다. 

CXX17=/opt/rh/devtoolset-9/root/usr/bin/g++ -std=gnu++17 -fPIC

 

위처럼 "-std=g++17"을  "-std=gnu++17"로 바꾸고,  "-fPIC" 를 추가해주었다. 

 

 

해결완료

 

 

2024.05.18 gcc 새로운거 깔다가 에러나서 이건거 경로 추가함

CXX17=/opt/rh/devtoolset-9/root/usr/bin/g++ -std=gnu++17 -fPIC
CC=/opt/rh/devtoolset-9/root/usr/bin/gcc

CXX=/usr/bin/g++

반응형