내가 아직도 정기적으로 사용하는 시스템 중 하나는 일종의 "Frankenbuntu" 14.04를 실행하는 것인데, 이 시스템은 내가 만들고 설치한 PPA와 소프트웨어를 통해 많은 추가 업데이트를 받았습니다 /opt/local
(Mac용 MacPorts 포트 시스템의 개조된 버전을 사용합니다. 실제로 대부분의 Linux 포트는 Mac에도 설치됩니다.
해당 접두사 아래의 라이브러리 디렉터리는 ldconfig에 추가되지 않으므로 LD_LIBRARY_PATH
.
저는 clang 8을 메인 컴파일러(LLVM 저장소를 통해 사용할 수 있는 최신 버전)로 사용해 왔습니다. 왜냐하면 Ubuntu(9.4.0)에서 사용할 수 있는 최신 GCC보다 조금 더 빠르고 강력하기 때문입니다. 나는 clang 12를 직접 만들었습니다(인내심이 매우 지루한 연습이었습니다!). 하지만 계속 읽어주세요.적절한 C++20 지원을 받으려면 clang 17이 필요합니다.. 또는 GCC12.
GCC 12도 있지만 port
/opt/local에 GCC(7)를 설치하기 전에 libstdc++ 런타임 혼합과 관련된 문제가 있었습니다. 그것들가능한이는 운영 체제에 이미 최신 libstdc++(GCC 9.4.0 버전)가 있거나 업데이트되어 유사한 상황이 다시 발생하지 않기 때문입니다. 적어도 OS를 업그레이드하기 전까지는 말이죠.
그럼에도 불구하고 나는 최근 몇 가지 모범 사례와 함정에 대한 간결한 개요에 대해 질문하고 싶었습니다(수년 동안 병렬 접두사를 설치하고 실행해 온 사람에게는 덜 명확할 수 있음). libstdc++ 9.4.0과 12.3.0 사이에 알려진 비호환성이 있습니까? 아니면 Mac에 설치한 libstdc++ 13.2.0 버전인가요?
미리 감사드립니다!
이전 의견에 대한 응답:
나는 레트로 컴퓨팅의 "팬"입니다.
내 운영 체제가 오래되어 더 이상 지원되지 않는다는 것을 알고 있습니다. 이 특정 컴퓨터에 이 버전을 유지해야 할 이유가 있으며 더 이상 조언을 구하지 않습니다. 업그레이드에는 XX분 밖에 걸리지 않습니다. 경험상 이 작업에는 시간이 더 걸리고 적어도 알려진 호환 커널(4.14.328 ATM)로 다운그레이드할 때까지 시스템이 불안정할 수 있으며 그 동안에는 유용한 용도로 사용할 수 없다는 것을 알고 있습니다. 내 병렬 접두사에 대한 GCC를 구축하는 데만 5시간이 걸릴 수 있으며 완전히 되돌릴 수 있습니다(MacPorts에는 매우 편리한 비활성화/활성화 기능이 있습니다)
나는 또한 libstdc++가 ABI와 호환되지 않는다는 것을 알고 있지만 최소한 다음을 목표로 하고 있습니다.뒤로ABI 호환:
apt에는 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6 apt show libstdc++6 패키지: libstdc가 포함되어 있습니다. ++6 상태: 설치됨 자동 설치: 없음 멀티 아치: 동일 버전: 9.4.0-1ubuntu1~14.04
port:libgcc13
내 Mac에 설치된 libstdc++ 버전:
> otool -L /opt/local/lib/libgcc/libstdc++.6.dylib
/opt/local/lib/libgcc/libstdc++.6.dylib:
/opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.32.0)
동일한 SOVERSION(6)은 dylib의 보다 엄격하게 제어되는 내장 버전 번호에서도 볼 수 있습니다.
나는 이것을 libstdc++ v13.2.0이해야한다이 버전이 14.04에서 여전히 사용 가능한 이전 버전에 대한 드롭인 대체인 것처럼 현재 가지고 있는 버전에 대한 드롭인 대체입니다.
적성 버전 libstdc++6:amd64 패키지 libstdc++6:
p 4.8.2-19ubuntu1 trusty 500 p 4.8.4-2ubuntu1~14.04.4 trusty-security, trusty-updates 500 i 9.4.0-1ubuntu1~14.04 trusty 500
따라서 알려진 비호환성 및/또는 문제에 대한 질문은 의도된 이전 버전과의 호환성이라는 맥락에서 읽어야 합니다.
std::auto_ptr
나는 C++03 모드에서도 GCC 13이 실제로 있어야 할 기능을 더 이상 제공하지 않는다는 것을 발견했습니다 (그러나 빌드 구성 문제로 인한 경우에는 그렇지 않습니다).
답변1
첫 번째 부분 답변.
ld.so 경로에서 port:libgcc13
빌드하고 테스트한 후 libstdc++.so.6.0.32
이제 시스템의 .so 라이브러리 대신 이 라이브러리를 로드하는 데 명백한 문제가 없음을 확인할 수 있습니다 libstdc++.so.6.0.28
.
해당 헤더 파일에 대해 코드를 빌드해도 시스템 C++ 런타임( undefined reference to 'std::bad_function_call::what() const'
)에 연결되지 않습니다. 즉, 해당 헤더 파일에 대해서도 실행되지 않습니다. 그러나 이것은 또한 예상되는 일이며 병렬 접두사 아래에 바이너리를 설치하는 데 이 런타임만 사용하는 것을 기억하는 한 나에게는 문제가 되지 않습니다. 그럼에도 불구하고 그들은 다른 라이브러리에 대한 강한 의존성을 갖게 될 것입니다.