我正在尝试使用OpenSync 0.4(确实为0.3.9)依赖构建应用程序。
在项目的configure.ac中,opensync库被写为libopensync1
。但是,这不是基于我的Gentoo系统。将libopensync1
更改为libopensync
确实可以解决问题。
我使用Google进行了搜索,发现libopensync1
用于某些发行版,而libopensync
用于其他发行版。那么如何在configure.ac
?
感谢。
答案 0 :(得分:4)
宏AC_SEARCH_LIBS可以满足您的需求。 (关于是否应该使用pkg-config,存在很多激烈的争论。如果你选择依赖它,ptomato给出了一个合理的方法。)只需将它添加到你的configure.ac:
AC_SEARCH_LIBS([osync_mapping_new],[opensync1 opensync],[], [AC_MSG_ERROR([can't find opensync])])
这将首先查找名为opensync1的库;如果 它没有找到,它会寻找opensync。
使用pkg-config的主要缺点是大多数项目都是如此 依靠它实际上不检查.pc提供的数据 文件是可靠的,因此配置可能会成功,但后续构建 将失败。用户始终可以设置PKG_CONFIG = true 在运行configure时完全消除所有数据 由任何相关的.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
找到答案 1 :(得分: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
。