libncurses.so.5를 찾는 Linux 롤링 릴리스 버전에서 GDB를 실행하려고 하는데 시스템에 버전 6이 설치되어 있습니다. 사람들이 ln을 사용하여 libncurses.so.5를 버전 6에 연결하는 솔루션을 본 적이 있지만 이는 좋은 습관이 아닌 것 같습니다(최신 항목은 더 이상 사용되지 않거나 제거되었을 수 있음).
기존 라이브러리를 새 라이브러리에 연결하는 것이 허용됩니까, 아니면 더 나은 방법이 있습니까?
특정 문제에 대한 자세한 내용:
- 커널 5.8을 사용하는 Manjaro Linux
- pacman 저장소에서 애플리케이션(STCubeIDE)이 설치되지 않았습니다(수동 설치).
답변1
기존 라이브러리를 새 라이브러리에 연결하는 것이 허용됩니까?
아니요.
바이너리 비호환성으로 인해 프로그램이 언제든지 중단될 수 있습니다. 일반적으로 배포 도구( 등)를 사용하는 것 외에 시스템 파일(예: 아래의 모든 항목)을 조작하는 것은 /usr
어리석은 생각입니다.apt
yum
이를 수행하는 더 좋은 방법이 있습니까?
이전 라이브러리(아래와 같은 /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을 사용하여 이 작업을 수행할 수 있습니다.기본구성 스크립트의 값이 변경되었습니다.)