2013-11-28 3 views
1

몇 달 전에 데비안에서 libxml2를 공유 라이브러리로 사용한 C 소프트웨어를 만들었습니다. 소프트웨어 설치를위한 .deb 파일을 만들었고 우분투 사용자도 실행할 수있었습니다.버전이없는 공유 라이브러리와 연결

오늘날 우분투의 최신 버전에는 더 큰 버전의 libxml2가 있습니다. 이제는 소프트웨어가 실행되지 않고 libxml2의 이전 버전을 묻습니다. libxml2의 새 버전을 연결하면서 소프트웨어를 빌드하는 것이 유일한 방법입니다.

내 질문에 특정 버전을 필요로하지 않고 공유 라이브러리에 연결할 수 있습니까? 소프트웨어가 일부 버전에서 작동하지 않을 수있는 위험을 감수하고 있습니까?

그렇다면 Linux 배포판에 소프트웨어를 배포 할 수없는 경우 공유 라이브러리와 링크 할 때의 실질적인 이점은 무엇입니까?

도움 주셔서 감사합니다.

감사합니다. 빈센트.

답변

1

대부분의 공유 라이브러리에는 SONAME이 포함됩니다. 이 SONAME은 이진 호환성을 나타내는 데 사용됩니다. libxml2.so.2.7.9가 나온 경우

readelf -Wa libxml2.so.2.7.8 | grep SONAME 
0x000000000000000e (SONAME)    Library soname: [libxml2.so.2] 

, 그것은 가능성이 여전히 v2.7.8과 바이너리 호환 될 것이다 : 예를 들어, libxml2.so.2.7.8는 libxml2.so.2의 SONAME을 포함하고있다 , 그리고 여전히 libxml2.so.2의 SONAME을 가지면 응용 프로그램이 정상적으로 작동합니다. 바이너리 호환성을 위반 한 변경 사항이 도입되었을 때만 SONAME이 증가하여 응용 프로그램이 중단됩니다.

모든 배포판에서 자동으로 작동하는 패키지를 만들려면 libxml2의 고유 버전을 제공 한 다음 LD_LIBRARY_PATH을 수정하여 버전이 자동으로로드되게하십시오.

+1

"모든 공유 라이브러리에는 'SONAME'이 (가) 포함되어 있습니다.이 문장은 거짓입니다. 'SONAME'을 갖는 것은 좋은 습관입니다. 그러나 반드시 그런 것은 아닙니다. –

+0

감사! 나는 그것을 반영하기 위해 나의 대답을 업데이트했다. –

관련 문제