【问题标题】:Using library with different names within autoconf在 autoconf 中使用不同名称的库
【发布时间】:2010-12-06 14:29:47
【问题描述】:

我正在尝试构建一个具有 OpenSync 0.4(实际上是 0.3.9)依赖项的应用程序。

在项目的 configure.ac 中,opensync 库写为libopensync1。然而,这并不建立在我的 Gentoo 系统上。将 libopensync1 更改为 libopensync 确实为我解决了这个问题。

我用谷歌搜索,发现libopensync1 用于某些发行版,而libopensync 用于其他发行版。那么configure.ac这个问题怎么解决呢?

谢谢。

【问题讨论】:

    标签: autoconf gentoo pkg-config


    【解决方案1】:

    宏 AC_SEARCH_LIBS 可以满足您的需求。 (关于是否应该使用 pkg-config 存在很多激烈的争论。如果您选择依赖它,ptomato 提供了一种合理的方法。)只需将其添加到您的 configure.ac:

    AC_SEARCH_LIBS([osync_mapping_new],[opensync1 opensync],[], [AC_MSG_ERROR([找不到opensync])])

    这将首先查找名为 opensync1 的库;如果 它没有找到,它会寻找 opensync。

    使用 pkg-config 的主要缺点是大多数项目 依靠它实际上并不检查.pc提供的数据是否 文件是可靠的,因此配置可能会成功,但后续构建 将失败。用户始终可以设置 PKG_CONFIG=true 运行时配置并完全消除所有数据 由任何关联的 .pc 文件提供,通过以下方式设置 LIBS、CFLAGS 等 使用“老式”的方式。

    不使用 pkg-config 的主要缺点是用户 必须以老式的方式设置 LIBS、CFLAGS 等。在实践中, 这很简单,所有 pkg​​-config 所做的就是移动 将单个 CONFIG_SITE 文件中的数据单独维护 每个包的 .pc 文件。

    如果您确实使用 PKG_MODULE_CHECK,请致电 AC_CHECK_LIB 或 AC_SEARCH_LIBS 验证数据 .pc 文件由 PKG_CHECK_MODULES 定位

    【讨论】:

      【解决方案2】:

      我假设在您的 configure.ac 中发生这种情况的位置是在 PKG_CHECK_MODULES 调用中。

      查看 libopensync 源,似乎libopensync1 是新名称,libopensync 是旧名称。因此,我们将使用 pkg-config 宏来查找较新的名称​​除非它不存在。

      把这个放在你的configure.ac:

      # Check if libopensync1 is known to pkg-config, and if not, look for libopensync instead
      PKG_CHECK_EXISTS([libopensync1], [OPENSYNC=libopensync1], [OPENSYNC=libopensync])
      

      稍后在您的PKG_CHECK_MODULES 通话中,将libopensync1 替换为$OPENSYNC

      【讨论】:

        猜你喜欢
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-09
        • 1970-01-01
        相关资源
        最近更新 更多