首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空${shlibs:依赖性},同时用cmake为Debian/Ubuntu构建系统打包Mapnik插件

空${shlibs:依赖性},同时用cmake为Debian/Ubuntu构建系统打包Mapnik插件
EN

Stack Overflow用户
提问于 2015-02-23 09:49:14
回答 1查看 494关注 0票数 0

我正在创建一个Mapnik插件(https://github.com/rbuch703/coords-mapnik-plugin),目前正在为Debian/Ubuntu打包它。二进制包仅由一个由C++代码构建的共享库组成。但是作为Mapnik插件,这个库遵循了与通常的POSIX库约定完全不同的约定:

  • 文件名必须是<name>.input而不是lib<name>.so
  • 该文件安装在Mapnik插件目录(通常是/usr/lib/mapnik/input)中。
  • 文件不应该由ldconfig找到,而是Mapnik试图在运行时自行找到插件。

现在插件的构建系统是cmake,它使Debian的大部分部分直接打包:debian/rules文件只包含基本行:

代码语言:javascript
复制
#!/usr/bin/make -f
%:
    dh $@

但是,我遇到了替换变量{shlibs:依赖性}的问题:它根本没有设置(特别是,debian/<package name>.substvars文件中没有对应的行),Lintian正确地抱怨了这个事实(Lintian的实际抱怨是missing-dependency-on-libc )。但是当我手动添加libc依赖项时,Lintian解释了package-depends-on-hardcoded-libc,这意味着“给定的包直接声明了libc上的依赖项,而不是在其debian/control节中使用${shlibs:依赖性}”)。我想满足林田而不是尊重,但却不能这样做。

现在我发现我可以加上这一行

代码语言:javascript
复制
dpkg-shlibdeps debian/<packagename>/usr/lib/mapnik/input/coords.input

到我的rules文件。这将创建正确的${shlibs:Depends}行,但它将在错误的文件(debian/substvars而不是debian/<package name>.substvars)中创建它,其中构建系统只是忽略它,Lintian一直抱怨缺少依赖关系。

我猜想问题的根源在于我的Mapnik插件不符合POSIX库命名约定(而且Mapnik插件不能这样做),因此打包系统不能正确地处理它。但我不知道如何解决这个问题。

补充说明:

  • 这些包是使用debuild构建的。除了Lintian错误消息之外,构建过程很好地工作,并正确地创建了.deb包。
  • 我的实际目标是在Launchpad上构建干净的包,这样我就可以将它添加到我的Ubuntu中。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 16:05:52

可以为dpkg-shlibdeps提供一个带有-T标志的输出文件。类似于:

代码语言:javascript
复制
override_dh_shlibdeps:
        dh_shlibdeps
        dpkg-shlibdeps \
           -Tdebian/<packagename>.substvars \
           debian/<packagename>/usr/lib/mapnik/input/coords.input

如果有多个*.input文件,还可以执行以下操作:

代码语言:javascript
复制
override_dh_shlibdeps:
        dh_shlibdeps
        find debian/<packagename>/ -name "*.input" -exec \
            dpkg-shlibdeps -Tdebian/<packagename>.substvars {} +
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28670862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档