이것리눅스 표준 라이브러리이 프로젝트는 다양한 Linux 배포판 간의 바이너리 호환성을 만드는 데 전념하고 있습니다. 그런데 이것이 왜 필요한가? 즉, 패키지의 소스 코드는 모든 배포판에서 작동하지만 일단 컴파일되면 해당 배포판이 아닌 다른 배포판에서는 더 이상 작동하지 않습니다. 나는 Linux 커널이 모놀리식이며 배포판 간에 변경되지 않는다고 생각합니다. 커널 바이너리 후크가 배포판마다 다른 이유는 무엇입니까?
답변1
이 문제에 대해 더 많은 연구를 수행한 후 바이너리가 때때로 다른 배포판(동일한 하드웨어 사용)에서 실행되지 않는 데는 기본적으로 두 가지 이유가 있으며 두 가지 모두 공유 라이브러리와 관련되어 있음을 발견했습니다. 다른 유사한 질문에는 이를 명시적으로 명시하지 않은 다소 둔감한 답변이 있으므로 여기에 간단한 답변을 게시하고 있습니다.
(1) 첫 번째 문제는 공유 라이브러리가 다른 배포판의 다른 위치에 있을 수 있다는 것입니다. 애플리케이션은 항상 LD_LIBRARY_PATH에서 라이브러리를 찾아야 하므로 이는 중요하지 않습니다. 그러나 일부 잘못 작성된 애플리케이션은 LD_LIBRARY_PATH를 사용하지 않고 대신 하드코딩된 라이브러리 경로를 사용하여 릴리스 수준 비호환성을 유발합니다.
(2) 두 번째 문제는 공유 라이브러리가 배포마다 다를 수 있다는 것입니다. 일반적으로 상대적으로 모호하거나 고급 기능만 다르지만 애플리케이션에서 사용하는 API 호출이 어떤 이유로 한 배포판의 .so에는 있지만 다른 배포판의 .so에는 없으면 비호환성이 발생합니다. PC의 "DLL 지옥"과 다소 유사합니다.