8bi*_*dge 12 linux ubuntu linker makefile
我最近不得不在Ubuntu系统上做一些小编程(我是一个非常低级的初学者)而且我真的只是熟悉makefile.
我注意到告诉链接器要包含哪些库的参数总是-l {library name},其中相应的库在/ usr/lib文件夹中称为"lib {library name} .a".
我想知道:这是一个会议吗?我原以为我需要输入-llibNAME来查找一个名为libNAME.a的库,但它似乎假设一个lib前缀.
总是这样吗?我可以在不使用lib前缀的情况下命名库吗?
gee*_*aur 18
您可以命名一个你想要的任何方式,但ld的-l假设lib前缀适用于静态和共享库,并可以追溯到很长的路要走; 你需要明确地命名它以使用没有lib前缀的.
即使在现代系统上,这实际上也很有用:名称libfoo.so可以标识为链接时库,同时foo.so表示实现运行时插件的共享对象.或者特定于子系统的前缀代替lib识别特定子系统的插件; 例如pam_*.so,见nss_*.so.
nin*_*alj 12
name.a是一个静态库(a因为它是对象的存档).
name.so是动态库(so因为它是动态共享对象的共享对象,有时也称为DSO).
该-lfoo连接器开关传统假设形式的名称libfoo.{so,a},并在库路径上搜索它.您也可以直接将库名称传递给链接器(不使用-l开关),但在这种情况下,您必须明确地将路径传递给库.
如上所述@geekosaur,如果在运行时打开共享对象,则dlopen()采用完整文件名.
| 归档时间: |
|
| 查看次数: |
10181 次 |
| 最近记录: |