오래된 공유 라이브러리를 사용하는 애플리케이션을 어떻게 처리합니까?

오래된 공유 라이브러리를 사용하는 애플리케이션을 어떻게 처리합니까?

libncurses.so.5를 찾는 Linux 롤링 릴리스 버전에서 GDB를 실행하려고 하는데 시스템에 버전 6이 설치되어 있습니다. 사람들이 ln을 사용하여 libncurses.so.5를 버전 6에 연결하는 솔루션을 본 적이 있지만 이는 좋은 습관이 아닌 것 같습니다(최신 항목은 더 이상 사용되지 않거나 제거되었을 수 있음).

기존 라이브러리를 새 라이브러리에 연결하는 것이 허용됩니까, 아니면 더 나은 방법이 있습니까?

특정 문제에 대한 자세한 내용:

  • 커널 5.8을 사용하는 Manjaro Linux
  • pacman 저장소에서 애플리케이션(STCubeIDE)이 설치되지 않았습니다(수동 설치).

답변1

기존 라이브러리를 새 라이브러리에 연결하는 것이 허용됩니까?

아니요.

바이너리 비호환성으로 인해 프로그램이 언제든지 중단될 수 있습니다. 일반적으로 배포 도구( 등)를 사용하는 것 외에 시스템 파일(예: 아래의 모든 항목)을 조작하는 것은 /usr어리석은 생각입니다.aptyum

이를 수행하는 더 좋은 방법이 있습니까?

이전 라이브러리(아래와 같은 /opt/oldlibs)를 유지하고 프로그램이 LD_LIBRARY_PATH환경 변수를 통해 이를 사용하도록 합니다. 자세한 내용은ld.so(8)맨페이지.

답변2

기존 라이브러리를 새 라이브러리에 연결하는 것이 허용됩니까, 아니면 더 나은 방법이 있습니까?

사용되는 기능에 따라 작동할 수도 있고 작동하지 않을 수도 있습니다.

이는 일반적으로 나쁜 습관이지만 오래된 라이브러리를 추적하고 싶지 않고 기존 애플리케이션이 이 핵을 사용할 수 있다면 아무도 반대하지 않을 것입니다.

답변3

아니요 - 그에 따르면웹사이트, Manjaro에는 ncurses 6.2가 있으며 Arch의 패키지를 재사용하므로패키지 빌드스크립트는 ncurses 5와 바이너리 호환되지 않는 ABI 6을 사용한다고 알려줍니다.

예를 들어, gdb에는 ncurses를 사용하여 터미널에 디버깅 정보를 표시하는 모드가 있습니다. ncurses5를 컴파일한 후 ncurses6을 강제 실행하면 강조 표시 및 선 그리기 문자가 올바르게 표시되지 않습니다. ABI 5와 ABI 6에서는 화면에 표시되는 각 셀의 데이터 구조 크기가 다르기 때문입니다.

이렇게 하고(ncurses5인 척하기 위해 ncurses6 라이브러리에 대한 링크) 버그를 보고하려고 하면 릴리스 노트만 표시됩니다(예:ncurses 6.0) 그리고자주하는 질문.

비슷한 것을 유지해야 한다면 ABI 5용 ncurses를 컴파일할 것입니다. (문서에 나와 있듯이 ncurses6을 사용하여 이 작업을 수행할 수 있습니다.기본구성 스크립트의 값이 변경되었습니다.)

관련 정보