동일한 Debian 패키지에 있는 공유 라이브러리 간의 종속성

동일한 Debian 패키지에 있는 공유 라이브러리 간의 종속성

여러 공유 라이브러리가 포함된 패키지를 만들고 싶다고 가정해 보겠습니다. 이 패키지에는 및 가 libfoo포함되어 있습니다 . 이제 의 표기법을 사용한다고 상상해 보세요 . 이렇게 컴파일하면 모든 것이 정상입니다.liba.so.1libb.so.1liba.so.1libb.so.1

cc -shared -fPIC -Wl,-soname,libb.so.1 -o libb.so.1 libb.c
cc -shared -fPIC -Wl,-soname,liba.so.1 -o liba.so.1 liba.c libb.so.1

그러나 이를 위해서는 몇 가지 추가 작업이 필요합니다(종속성을 수동으로 파악하여 makefile에 인코딩해야 하는데 scons는 이 작업을 자동으로 수행하지 않는 것 같습니다). 간단한 메소드를 컴파일하면 흥미로운 문제가 발생합니다.

cc -shared -fPIC -Wl,-soname,libb.so.1 -o libb.so.1 libb.c
cc -shared -fPIC -Wl,-soname,liba.so.1 -o liba.so.1 liba.c

이제는 헤더에 표시되지 않으며 liba.so.1데비안 패키지를 빌드할 때 다음 메시지가 표시됩니다(이 단계는 더 오래 걸립니다).libb.so.1DT_NEEDEDobjdump -p

dh_shlibdeps
   dpkg-shlibdeps: 경고: debian/libfoo1/usr/lib/liba.so.1에서 사용하는 기호 b는 어떤 라이브러리에서도 찾을 수 없습니다.

이는 기호가 b에 정의되어 있기 때문에 발생 libb.so.1하지만 dpkg-shlibdeps이를 알 수 있는 방법이 없습니다.

여기에는 실제 문제가 없는 것 같습니다. 실제 바이너리에는 libalibbas 가 모두 있고 DT_NEEDED둘 다 런타임에 로드됩니다. 그로부터 몇 년이 지났습니다. 이 문제는 올바르고 깔끔하게 빌드된 데비안 패키지를 만들려고 할 때만 발생합니다.

이 문제를 어떻게 해결해야 합니까? (~해야 한다내가 이 문제를 해결했나요? ) 이 라이브러리는 실제로(TM) 동일한 데비안 패키지에 있어야 합니다. (보너스 포인트의 경우 순환 종속성을 해결합니다. 즉 libb기호도 사용합니다 liba.)

관련 정보