代码之家  ›  专栏  ›  技术社区  ›  rich p

链接器从哪里获得库名称?

  •  2
  • rich p  · 技术社区  · 9 年前

    我对开发有点陌生,我想知道链接器是如何获得库名称的? 例如,在链接器添加行中,当我想添加对libxml2的支持时,命令是-lxml2。然而当我想为xmlsec添加lib时,命令却是-lxmlsec1。当我想增加openssl时,我需要-lcrypto和-lssl。 有人能告诉我这些图书馆的名字是从哪里来的吗?这似乎不是很直观。如果我想包含一个库,我应该如何找到要使用的-l命令? 这是一个开发C++程序的ubuntu系统。

    1 回复  |  直到 9 年前
        1
  •  1
  •   SergeyA    9 年前

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

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

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