同一 Debian 软件包中共享库之间的依赖关系

同一 Debian 软件包中共享库之间的依赖关系

假设我想创建一个包含多个共享库的包 - 调用它libfoo,其中包含liba.so.1libb.so.1。现在,假设liba.so.1使用来自 的符号libb.so.1。如果我像这样编译,那么一切都OK:

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没有(使用可见),并且在构建 debian 包时我收到以下消息(并且此步骤需要更长的时间):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,并且它们都在运行时加载......已经很多年了。这个问题仅在尝试创建一个正确的、干净构建的 debian 软件包时才会出现。

我应该如何解决这个问题? (应该我解决了这个问题?)这些库确实应该(TM)位于同一个 debian 包中。 (为了获得奖励积分,请解决循环依赖关系,即libb还使用 中的符号liba)。

相关内容