我正在尝试构建一个具有 OpenSync 0.4(确实是 0.3.9)依赖项的应用程序。
在项目的 configure.ac 中,opensync 库写为libopensync1
. 然而,这并不建立在我的 Gentoo 系统上。更改libopensync1
为libopensync
确实为我解决了这个问题。
我用谷歌搜索,发现它libopensync1
在某些发行版中使用,而libopensync
在其他发行版中使用。那么如何解决这个问题configure.ac
呢?
谢谢。
我正在尝试构建一个具有 OpenSync 0.4(确实是 0.3.9)依赖项的应用程序。
在项目的 configure.ac 中,opensync 库写为libopensync1
. 然而,这并不建立在我的 Gentoo 系统上。更改libopensync1
为libopensync
确实为我解决了这个问题。
我用谷歌搜索,发现它libopensync1
在某些发行版中使用,而libopensync
在其他发行版中使用。那么如何解决这个问题configure.ac
呢?
谢谢。
宏 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 文件中的数据
我假设在你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
.