【问题标题】:How can I best check for C library dependencies?如何最好地检查 C 库依赖项?
【发布时间】:2011-05-05 21:20:31
【问题描述】:

我正在构建一个安装高级堆栈的东西,为此,我需要安装较低级别的东西。

查找是否安装了 Java 的最简单方法是在 shell 脚本中输出 which java 并检查它是否可以找到它。我现在已经到了需要做一些没有明显二进制文件的库的地步——例如,基本上是 C.libxml 中的include

总的来说,我对 C 语言非常陌生,所以这对我来说有点棘手。 :) 理想情况下,我可以制作一个调用 #include <xxxx> 的小 C 应用程序的 shell 脚本,其中 xxxx 是我正在检查存在的库。如果找不到,则会出错。当然,不幸的是,所有这些都发生在编译之前,所以它不像我想要的那样动态。

我在一个可能没有安装任何东西(无论是高级语言或包管理器还是你有什么)的系统上执行此操作,所以我正在寻找更多的基本 shell 脚本方式做事(或者可能是一些聪明的 C 或命令行 gcc 选项)。或者也许只是手动搜索 gcc 无论如何都会寻找的包含路径/usr/local/include/usr/include 等)。有什么想法吗?

【问题讨论】:

  • 您是否要:1) 在编译时确定库 (.so) 存在,2) 在编译时确定头文件存在 (.h),3) 在运行时确定是否存在库,或者 4) 在运行时确定标头存在?还是别的什么?
  • 另外,您的目标操作系统是什么?您对 which 的使用暗示了某种形式的 *NIX。
  • 查找依赖关系的有用工具是ldd。用法:ldd file,文件可以是可执行文件或共享库。
  • 以“最安全”为准。就像我说的,我通常呆在我的安全和书呆子的高级语言世界中,所以我愿意接受建议。 :) 从我的角度来看,我只想知道“是的,libxml2 已安装在系统上”,有效。还 - 针对 *nix,多种口味。

标签: c shell dependencies package


【解决方案1】:

Autotools 确实是您所需要的。它是处理这个问题的一个巨大(和奇怪)的框架: http://www.gnu.org/software/autoconf/

您还可以使用pkg-config,它将与使用该机制的较新软件一起使用: http://pkg-config.freedesktop.org/wiki/

【讨论】:

  • 有没有什么方法可以在没有 Makefile 和各种碎片的情况下快速进入它?在我最一厢情愿的一厢情愿中,我真正想要的是像magic-configure-binary libxml2 这样的东西来返回系统是否可以使用某些东西。
  • @Zach:我添加了一个关于 pkg-config 的注释
【解决方案2】:

这是 configure 的目的(automake 和 autoconf 的一部分)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多