我是开发的新手,我想知道链接器如何获取库名?
例如,在链接程序添加行中,当我想添加对libxml2的支持时,命令为-lxml2。但是当我想为xmlsec添加库时,它是-lxmlsec1。当我想添加openssl时,我同时需要-lcrypto和-lssl。
有人可以向我解释这些库名的来源吗?似乎不是很直观。如果我想包括一个库,我应该如何找到要使用的-l命令?
这是在开发C++程序的ubuntu系统上。
最佳答案
“常规”链接器是我所知的最愚蠢的程序:)对于库,它遵循一组非常简单的规则。首先,对于每个-l规则,它在前面添加lib并在最后添加.a形成一个静态库名称。它还通过添加.so而不是.a来形成动态库名称。对于每个-I规则,它都会在其库搜索路径中添加指定的路径。
因此,当它看到-l规则并查看由-L规则设置的所有库路径时(按在命令行中出现的顺序),并查看它是否可以在此位置找到动态或静态库(如果可以)看到两者,则根据-B规则选择一个)。
这是一个通用的介绍。现在,对于您的特定问题,为了检查您应该包括哪个库,您应该阅读文档。我总是告诉您您需要哪个-l规则。