使用自动工具在磁盘上查找库的位置
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.
上找到更多信息
对于系统库和通用库,没有这样做的标准方法 — 主要是因为交叉编译意味着当您实际 运行 软件时,您并不真正知道该路径是什么。
如果您可以提供有关您尝试执行的操作的更多详细信息,可能会更容易找到通用解决方案。
我知道您可以使用 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.
对于系统库和通用库,没有这样做的标准方法 — 主要是因为交叉编译意味着当您实际 运行 软件时,您并不真正知道该路径是什么。
如果您可以提供有关您尝试执行的操作的更多详细信息,可能会更容易找到通用解决方案。