确定是否在Unix上安装了C库

Mor*_*nar 6 c unix

作为我上一篇文章的后续问题,是否有任何简单的方法来判断给定的C库是否安装在给定的机器上(不是以编程方式,只是一次性的事情)?我需要使用libuuid,但我不确定它是否安装在有问题的机器上.我能想到的唯一两种方法是:

1)尝试在那里编译代码(比我想做的工作多)

2)尝试像"man libuuid"这样的东西虽然看起来如果由于某种原因手册没有安装,这并不总是可靠的.

还有更好的其他方式吗?

Meh*_*ari 9

你考虑过用过autoconf吗?它旨在检查并查看构建环境是否已正确设置.

  • @Chris Lutz,这是最好的方法,但不幸的是它仍然是一个可怕的方法。 (2认同)

mha*_*wke 7

最简单的方法是ld使用该-l选项调用.这将有效地测试库的存在,自动搜索标准库位置:

$ ld -luuid
ld: warning: cannot find entry symbol _start; not setting start address
$ echo $?
0

$ ld -luuidblah
ld: cannot find -luuidblah
$ echo $?
1

# so...
$ ld -luuid 2>/dev/null && echo "libuuid exists" || echo "libuuid not found"
Run Code Online (Sandbox Code Playgroud)

编辑

正如dreamlax指出的那样,这并不适用于所有unix变体.我不知道它是否适用于所有unix(我已经测试过linux和OpenBSD),但你可以试试这个:

$ echo "int main(){}" | gcc -o /dev/null -x c - -luuid 2>/dev/null
$ echo $?
0

$ echo "int main(){}" | gcc -o /dev/null -x c - -luuidblah 2>/dev/null
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)