Conda 환경에서 libstdc++ 버전 충돌 문제 해결하기

코드짜는침팬지·2024년 10월 29일

주의: 명령어의 상세주소는 제 디렉토리를 기준으로 설정했습니다. 본인 주소에 맞춰서 변경해야 합니다.

문제 상황

Jupyter Notebook 실행 시 다음과 같은 libstdc++ 버전 관련 오류가 발생:

ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found

이는 시스템의 libstdc++ 버전이 conda 환경에서 필요로 하는 버전보다 낮을 때 발생하는 문제입니다.

원인 분석

  1. conda 환경의 ZMQ 라이브러리가 GLIBCXX_3.4.29 이상의 버전을 요구
  2. 시스템의 libstdc++.so.6가 이 버전을 지원하지 않음
  3. conda 환경 내에 더 높은 버전의 libstdc++가 있지만 시스템 라이브러리가 우선 참조됨

해결 과정

1. conda 환경 내 libstdc++ 파일 확인

find ~/.conda/envs/pgenllama -name "libstdc++.so.*"

결과:

  • /home/chae/.conda/envs/pgenllama/lib/libstdc++.so.6.0.33
  • /home/chae/.conda/envs/pgenllama/x86_64-conda-linux-gnu/sysroot/lib64/libstdc++.so.6.0.29
  • 기타 버전들...

2. 심볼릭 링크 생성

conda 환경의 lib 디렉토리에서 최신 버전의 libstdc++를 기본으로 사용하도록 심볼릭 링크 생성:

cd ~/.conda/envs/pgenllama/lib
ln -sf libstdc++.so.6.0.33 libstdc++.so.6

3. 라이브러리 경로 설정

conda 환경의 라이브러리를 우선적으로 참조하도록 LD_LIBRARY_PATH 환경변수 설정:

export LD_LIBRARY_PATH="/home/chae/.conda/envs/pgenllama/lib:$LD_LIBRARY_PATH"

해결 원리

  1. 심볼릭 링크를 통해 conda 환경 내에서 최신 버전의 libstdc++를 명시적으로 지정
  2. LD_LIBRARY_PATH 설정으로 conda 환경의 라이브러리를 시스템 라이브러리보다 우선하여 참조하도록 함

영구적 적용 방법

~/.bashrc 파일에 다음 라인을 추가하여 설정을 영구적으로 적용할 수 있습니다:

echo 'export LD_LIBRARY_PATH="/home/chae/.conda/envs/pgenllama/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc

장점

  • sudo 권한 불필요
  • 시스템 라이브러리를 수정하지 않음
  • conda 환경별로 독립적인 설정 가능

주의사항

  • 환경별로 라이브러리 버전이 다를 수 있으므로, 다른 conda 환경에서는 경로를 적절히 수정해야 함
  • 시스템 전반에 영향을 주지 않도록 conda 환경 내부에서만 설정을 변경

학교 서버로 써서 sudo권한을 못써서 쉽지 않았네요

profile
학과 꼴찌 공대 호소인

0개의 댓글