PKG_CHECK_MODULES vs AC_CHECK_LIB 用于检查库的可用性
PKG_CHECK_MODULES vs AC_CHECK_LIB for checking availability of libraries
我正在为一个项目使用 autotools。我想了解检查库是否存在的最佳实践?
我尝试使用 PKG_CHECK_MODULES
,但不幸的是,我使用的许多库都没有出现在 pkg-config --list-all
中(即使在 运行 ldconfig 之后)。
另一种方法是使用 AC_CHECK_LIB
,但这需要我从我需要测试的每个库中指定一个示例函数。
只要第三方软件支持 pkg-config,就使用它。如果第三方软件没有 pkg-config 支持,你必须自己写检查。
除非 Autoconf 已经提供了测试,或者您可以从其他开源项目复制测试。
我不同意已接受的答案。 (参见 PKG_CHECK_MODULES considered harmful?)PKG_CHECK_MODULES 在许多年前曾流行过一段时间,但从来没有被 autoconf 邮件列表中的大多数开发人员认为是好的做法。 autotools 不是包管理系统,并且 PKG_CHECK_MODULES 似乎是尝试将包管理功能塞入其中。如果包使用 PKG_CHECK_MODULES,配置脚本仍必须调用 AC_CHECK_LIB验证 pkg-config 返回的信息或冒构建失败的风险。此外,如果用户使用 LDFLAGS=-l/p/a/t/h/ 调用 configure
,他们应该可靠地期望构建使用 /p/a/t/h/liboo.so
而不是使用其他位置,但是 PKG_CHECK_MODULES 要求用户覆盖 PKG_CONFIG_PATH 或以其他方式更改 pkg-config 的响应以覆盖库搜索路径。
我正在为一个项目使用 autotools。我想了解检查库是否存在的最佳实践?
我尝试使用 PKG_CHECK_MODULES
,但不幸的是,我使用的许多库都没有出现在 pkg-config --list-all
中(即使在 运行 ldconfig 之后)。
另一种方法是使用 AC_CHECK_LIB
,但这需要我从我需要测试的每个库中指定一个示例函数。
只要第三方软件支持 pkg-config,就使用它。如果第三方软件没有 pkg-config 支持,你必须自己写检查。
除非 Autoconf 已经提供了测试,或者您可以从其他开源项目复制测试。
我不同意已接受的答案。 (参见 PKG_CHECK_MODULES considered harmful?)PKG_CHECK_MODULES 在许多年前曾流行过一段时间,但从来没有被 autoconf 邮件列表中的大多数开发人员认为是好的做法。 autotools 不是包管理系统,并且 PKG_CHECK_MODULES 似乎是尝试将包管理功能塞入其中。如果包使用 PKG_CHECK_MODULES,配置脚本仍必须调用 AC_CHECK_LIB验证 pkg-config 返回的信息或冒构建失败的风险。此外,如果用户使用 LDFLAGS=-l/p/a/t/h/ 调用 configure
,他们应该可靠地期望构建使用 /p/a/t/h/liboo.so
而不是使用其他位置,但是 PKG_CHECK_MODULES 要求用户覆盖 PKG_CONFIG_PATH 或以其他方式更改 pkg-config 的响应以覆盖库搜索路径。