"공유 객체를 열 수 없음"오류를 극복하기 위해 라이브러리를 심볼릭 링크하는 것이 좋습니까 (아니요)?


12

때로는 어떤 이유로 든 프로그램이 모든 종속성을 올바르게 지정하거나 포함하지 않았으며 프로그램을 시작하면 종속성이 없음을 나타내는 오류가 발생합니다. 일반적인 오류는 다음과 같습니다.

cannot open shared object libudev.so.0

/usr/lib다른 시스템 위치 또는 다른 시스템 위치 에서 심볼릭 링크를 만들어 이러한 문제를 해결하도록 사람들에게 조언하는 많은 답변을 보았습니다 . 이는 종종 문제를 해결하는 것으로 보입니다. 그러나 나는 사람들에게 나쁜 생각이라고 조언하는 동등한 수의 의견을 본다. 다음은 대표적인 답변입니다.

어떤 상황에서 프로그램을 작동시키기 위해 라이브러리를 심볼릭 링크하는 것이 허용됩니까? 못? 때때로? 프로그램 실행을 마친 후 심볼릭 링크를 삭제하면 어떻게됩니까?

이 작업의 결과는 무엇입니까?

답변:


12

이러한 링크를 만들 때의 문제는 의미있는 방식으로 관리되지 않는다는 것입니다. 해당 라이브러리가 제거되면 링크가 끊어집니다. 라이브러리가 업그레이드 된 경우 링크가 없기 때문에 오류가 발생할 수 있습니다.

또한 본질적으로 시스템에 누워 있습니다. 링크 된 예제에서는 libudev.so.1실제로 척입니다 libudev.so.0. 이유에 따라 이름이 다르게 지정됩니다 (라이브러리의 다른 버전). 일부 프로그램에서는이 기능이 제대로 작동하지만 버전 간 차이로 인해 문제가 발생할 수 있습니다 (예 : segfault 또는 기타 예기치 않은 동작).

따라서이 링크를 구체적으로 작성하여 프로그램을 실행하고 나중에 제거한다는 것을 알고 있다면 첫 번째 문제는 해결하지만 두 번째 문제는 해결하지 못합니다. 이것이 주요 문제를 해결하지만 이상적이지는 않습니다.

이상적인 해결책은 물론 올바른 버전의 라이브러리 (링크 된 예제에서 허용되는 답변)를 설치하거나 사용중인 버전에 맞게 프로그램을 컴파일하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.