使用自动工具在磁盘上查找库的位置

Find location of library on disk using autotools

我知道您可以使用 AC_SEARCH_LIBS 在库中搜索特定函数,但这只能告诉您库是否在库路径中并满足特定条件。有没有一种简单的方法来获取路径——或者更具体地说是满足 AC_SEARCH_LIBS 的库的前缀?

比如我写了

AC_SEARCH_LIBS([dlopen],[dl],[],[])

这只是让我根据是否找到包含 dlopen 的名为 dl 的库来做一些事情,但它没有告诉我该库在磁盘上的位置。

我需要这样做,因为我正在包装的其中一个程序的构建命令需要库的 prefix,而不仅仅是库名称。

除了使用 pkg-config 之外,没有其他标准方法可以满足您的需求。如果您要查找的库提供 .pc 文件,您可以查询它的 libdir 变量以确定文件可能在哪里(尽管不能保证它。)

PKG_CHECK_VAR([FOO_LIBDIR], [foo], [libdir])
AC_MSG_CHECKING([foo library path])
AS_IF([test "x$FOO_LIBDIR" = "x"], [
  AC_MSG_FAILURE([Unable to identify foo lib path.])
])

您可以在 PKG_CHECK_VAR on my Autotools Mythbuster.

上找到更多信息

对于系统库和通用库,没有这样做的标准方法 — 主要是因为交叉编译意味着当您实际 运行 软件时,您并不真正知道该路径是什么。

如果您可以提供有关您尝试执行的操作的更多详细信息,可能会更容易找到通用解决方案。