我发现不同发行版上库和头文件的位置有很大不同。例如,在 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
(带有库名称)的文件。