最近,我不得不在Ubuntu系统上做一些次要的编程(在这个系统上我是一个非常低级的初学者),我真的只是对makefile有所了解。
我注意到,告诉链接程序要包括哪些库的参数始终为-l {library name},其中在/ usr / lib文件夹中相应的库将是名为“ lib {library name} .a”的文件。
我想知道:这是公约吗?我以为我需要键入-llibNAME来找到一个名为libNAME.a的库,但它似乎采用了lib前缀。
总是这样吗?是否可以在不使用lib前缀的情况下命名库?
您可以命名一个你想要的任何方式,但ld的-l假设lib前缀适用于静态和共享库,并可以追溯到很长的路要走; 您需要明确命名它才能使用不带lib前缀的一个。
ld
-l
lib
即使在现代系统上,这实际上也是有用的:libfoo.so可以将名称标识为链接时库,而foo.so表示实现运行时插件的共享库。或者使用子系统特定的前缀代替,lib以标识特定子系统的插件;参见例如pam_*.so和nss_*.so。
libfoo.so
foo.so
pam_*.so
nss_*.so