【问题标题】:Why are some Windows dll names prefixed by lib为什么某些Windows dll名称以lib为前缀
【发布时间】:2021-11-23 01:13:25
【问题描述】:

为什么某些 C++ dll 名称以 lib 为前缀,例如 libxml2.dll?这有什么意义吗?

【问题讨论】:

  • 不,名称前缀没有任何意义。
  • 它可以引用库,例如​​在具有函数库但不是必需的 dll 中
  • 当使用 GCC 及其链接器查找库时,它会在前面加上 lib 来查找库。因此,如果您与xml2 链接,那么它将寻找libxml2.dll(或者可能是它的导出库libxml2.a)。
  • 这主要是个小问题。在 Windows 中,库以它开头并不常见。

标签: c++ c windows dll


【解决方案1】:

这纯粹是一种约定,只不过是让人们知道它是一个库。你可以调用任何你喜欢的dll

【讨论】:

    【解决方案2】:

    在链接时使用(引用)库。更多详情,请查看[SO]: LNK2005 Error in CLR Windows Form (@CristiFati's answer)

    尼克斯注意事项

    根据[Man7]: LD(1)

    -l 名称规范

    --library=namespec

    namespec 指定的存档或目标文件添加到要链接的文件列表中。此选项可以使用任意次数。如果 namespec 的格式为 :filenameld 将在库路径中搜索名为 filename 的文件,否则它将在库路径中搜索名为 libnamespec.a 的文件。

    在支持共享库的系统上,ld 还可以搜索 libnamespec.a 以外的文件。具体来说,在 ELF 和 SunOS 系统上,ld 将在目录中搜索名为 libnamespec.so 的库,然后再搜索名为 libnamespec.a 的库。 (按照惯例,“.so”扩展名表示共享库。)请注意,此行为不适用于 :filename,它始终指定一个名为 filename 的文件。

    换句话说,可以将库传递给 GNU 链接器

    1. 按名称(基本或使用(绝对或相对)路径)
    2. 缩写:-ldummy。在这种情况下,链接器将搜索 libdummy.so(或 libdummy.a)。

    不用说,如果 .lib 将被命名为 dummy.so(或 dummy.a),#2. 不起作用

    生态系统

    这些库仅按名称 ([MS.Docs]: .Lib Files as Linker Input) 传递给 默认 (VStudio) 链接器
    但是,一些维护者添加 lib 前缀只是为了与 Nix 名称 保持一致。
    所以这只是一个约定,没有任何功能价值。

    但是现在为了缩小2个OSes之间的差距,Win多个Nix工具端口 (Mingw-w64, MSYS2, Cygwin, ...)。由于那些“服从”Nix 界面,您可以使用短格式(来自上一章),这会省去很多麻烦,尤其是在使用 Makefile 移植大型项目时s 包含 -l

    【讨论】:

    • “Nix 注意事项”也适用于 MinGW,因此它可能在 Windows 上有所用处。
    • @HolyBlackCat:我正在编辑,但你打败了我!
    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多