728x90
반응형
개요
gcc 버전을 업데이트한후 프로그램 배포시 gcc에서 생성한 library 몇개는 꼭 가져야 합니다.
이렇게 하지 않으면 segment fault가 발생 합니다.
문제 발생 상황
Ubuntu 18.04에서 GCC 13.1로 업그레이드한 후, 빌드된 실행 파일이 호스트 시스템의 설치된 libstdc++와 호환되지 않는 이유는 다음과 같은 원인에서 발생할 수 있습니다:
원인
- ABI (Application Binary Interface) 차이:
- GCC는 특정 버전에서 ABI에 변경을 가할 수 있습니다. 이는 C++ 표준 라이브러리(libstdc++)의 내부 구현이 변경되어 이전 버전의 GCC로 컴파일된 바이너리와 호환되지 않게 될 수 있다는 것을 의미합니다. 특히, 새로운 기능이나 최적화가 도입될 때 이러한 변경이 발생할 수 있습니다.
- libstdc++ 버전 차이:
- GCC 13.1은 최신 C++ 표준의 새로운 기능을 지원하며, 이로 인해 libstdc++의 새로운 버전이 필요합니다. Ubuntu 18.04에 기본적으로 설치된 libstdc++는 GCC 7.x 또는 8.x에 맞춰져 있을 가능성이 큽니다. 이 버전은 GCC 13.1에서 요구하는 최신 C++ 표준 기능을 제공하지 않기 때문에 호환성 문제가 발생할 수 있습니다.
- 심볼릭 링크 및 라이브러리 경로 문제:
- 시스템의 기본 libstdc++.so가 GCC 13.1의 새 라이브러리와 충돌할 수 있습니다. 실행 파일이 빌드될 때는 GCC 13.1의 라이브러리를 사용하지만, 실행 시에는 시스템의 기본 라이브러리를 참조하여 충돌이 발생할 수 있습니다.
필수로 가져가야 할 라이브러리
- libstdc++.so (C++ 표준 라이브러리):
- 최신 GCC로 빌드된 C++ 프로그램은 해당 버전의 libstdc++.so를 필요로 합니다. 이 라이브러리는 C++ 표준 라이브러리로, std::vector, std::string과 같은 표준 C++ 기능을 제공합니다.
- 위치: /usr/local/gcc-13.1.0/lib64/libstdc++.so
- libgcc_s.so (GCC 런타임 라이브러리):
- GCC가 사용하는 런타임 라이브러리입니다. 이 라이브러리는 예외 처리와 같은 기능을 제공합니다.
- 위치: /usr/local/gcc-13.1.0/lib64/libgcc_s.so
- libgomp.so (GCC OpenMP 라이브러리, OpenMP를 사용하는 경우):
- OpenMP를 사용하는 프로그램의 경우 필요합니다.
- 위치: /usr/local/gcc-13.1.0/lib64/libgomp.so
- libatomic.so (원자 연산을 사용하는 경우):
- 원자 연산(atomic operation)을 사용하는 경우 필요합니다.
- 위치: /usr/local/gcc-13.1.0/lib64/libatomic.so
- libssp.so (스택 보호를 사용하는 경우):
- 스택 보호(Stack smashing protection)를 사용하는 경우 필요합니다.
- 위치: /usr/local/gcc-13.1.0/lib64/libssp.so
- libquadmath.so (고정밀 수학 연산을 사용하는 경우):
- 고정밀 수학 연산을 사용하는 경우 필요합니다.
- 위치: /usr/local/gcc-13.1.0/lib64/libquadmath.so
728x90
반응형
'ProgrammingLang > c++' 카테고리의 다른 글
[Modern C++] 개요 및 목차 (2) | 2024.06.06 |
---|---|
[c++ 개발자되기] map, set , unordered_set, unordered_map (0) | 2024.05.25 |
[C++개발자되기] 32. STL Container 실무 (0) | 2022.12.28 |
[C++개발자되기] 31. sscanf 정규 표현식 (1) | 2022.10.25 |
[C++개발자되기]29. promise 와 future 그리고 async (0) | 2022.08.11 |