![如何在任何发行版上查找库和头文件的所有可能位置?](https://linux22.com/image/195611/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%BB%BB%E4%BD%95%E5%8F%91%E8%A1%8C%E7%89%88%E4%B8%8A%E6%9F%A5%E6%89%BE%E5%BA%93%E5%92%8C%E5%A4%B4%E6%96%87%E4%BB%B6%E7%9A%84%E6%89%80%E6%9C%89%E5%8F%AF%E8%83%BD%E4%BD%8D%E7%BD%AE%EF%BC%9F.png)
我发现不同发行版上库和头文件的位置有很大不同。例如,在 Fedora 上您有,/usr/lib64/libbfd.a
而在 Ubuntu 上您有/usr/lib/x86_64-linux-gnu/libbfd.a
。或者在 Fedora 上有,/usr/lib/gcc/x86_64-redhat-linux/10/include/stdatomic.h
而在 Ubuntu 上有/usr/lib/gcc/x86_64-linux-gnu/10/include/stdatomic.h
有没有办法知道您必须查看哪些位置,而无需维护每个发行版的位置列表?
答案1
你可以询问 C 预处理器(至少对于 GCC 前端驱动的任何东西):
$ cpp -v /dev/null -o /dev/null
...
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/10/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/10/:/usr/lib/gcc/x86_64-linux-gnu/10/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/10/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/10/:/usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/10/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-E' '-v' '-o' '/dev/null' '-mtune=generic' '-march=x86-64'
这给出了头搜索路径(“#include <...>搜索从这里开始:”和“搜索列表结束”之间的条目)和库搜索路径(给定的值LIBRARY_PATH
)。
有些库提供pkg-config
文件,您可以找到带有pkg-config --cflags
和pkg-config --libs
(带有库名称)的文件。