一尘不染

lib {library name} .a / .so是Linux中静态库的命名约定吗?

linux

最近,我不得不在Ubuntu系统上做一些次要的编程(在这个系统上我是一个非常低级的初学者),我真的只是对makefile有所了解。

我注意到,告诉链接程序要包括哪些库的参数始终为-l {library name},其中在/ usr / lib文件夹中相应的库将是名为“ lib
{library name} .a”的文件。

我想知道:这是公约吗?我以为我需要键入-llibNAME来找到一个名为libNAME.a的库,但它似乎采用了lib前缀。

总是这样吗?是否可以在不使用lib前缀的情况下命名库?


阅读 237

收藏
2020-06-07

共1个答案

一尘不染

您可以命名一个你想要的任何方式,但ld-l假设lib前缀适用于静态和共享库,并可以追溯到很长的路要走;
您需要明确命名它才能使用不带lib前缀的一个。

即使在现代系统上,这实际上也是有用的:libfoo.so可以将名称标识为链接时库,而foo.so表示实现运行时插件的共享库。或者使用子系统特定的前缀代替,lib以标识特定子系统的插件;参见例如pam_*.sonss_*.so

2020-06-07