위 에러는 서버에서 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++
반응형