1

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

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

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

谢谢。

4

2 回答 2

4

宏 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 文件提供的数据是否可靠,因此配置可能会成功,但后续构建会失败。用户始终可以在运行 configure 时设置 PKG_CONFIG=true 并完全消除任何关联的 .pc 文件提供的所有数据,以“老式”方式手动设置 LIBS、CFLAGS 等。

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

如果您确实使用 PKG_MODULE_CHECK,请调用 AC_CHECK_LIB 或 AC_SEARCH_LIBS 以验证 PKG_CHECK_MODULES 找到的任何 .pc 文件中的数据

于 2010-12-08T13:33:21.950 回答
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-12-06T22:57:01.733 回答