链接器在哪里获取库名?

时间:2015-08-26 20:11:00

标签: c++ linker autotools

我是开发人员的新手,我想知道链接器如何获取库名称? 例如,在链接器添加行中,当我想添加对libxml2的支持时,命令是-lxml2。但是当我想为xmlsec添加lib时,它是-lxmlsec1。当我想添加openssl时,我需要一个-lcrypto和一个-lssl。 有人可以向我解释这些图书馆名称的来源吗?它看起来并不直观。如果我想包含一个库,我该如何找到使用-l命令? 这是在开发C ++程序的ubuntu系统上。

1 个答案:

答案 0 :(得分:1)

'常规'链接器是我所知道的最愚蠢的程序:)当它涉及到库时,它遵循一套非常简单的规则。首先,对于每个-l规则,它在前面添加lib,最后在.a中添加以形成静态库名称。它还通过添加.so而不是.a来形成动态库名称。对于每个-I规则,它都会为其库搜索路径添加指定路径。

因此,当它看到-l规则时,查看由-L规则设置的所有库路径(按照命令行中出现的顺序)并查看它是否可以在此位置找到动态或静态库(如果它可以看到两者,它会根据-B规则选择一个)。

这是一个通用的介绍。现在,针对您的特定问题,为了检查您应该包含哪个库,您应该阅读文档。我总是告诉你哪些-l规则是你需要的。