C语言 为什么某些Windows dll名称以lib为前缀

gev0vcfq  于 2023-01-04  发布在  Windows
关注(0)|答案(2)|浏览(197)

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

mgdq6dx1

mgdq6dx11#

库在链接时使用(引用)。有关详细信息,请查看[SO]: LNK2005 Error in CLR Windows Form (@CristiFati's answer)

* 不考虑 * 事项

根据[Man7]: LD(1)

-l*名称规格 *
**--库=***名称规范 *

namespec 指定的归档文件或目标文件添加到要链接的文件列表中。此选项可以使用任意次。如果 namespec 的格式为 :filename,则ld将在库路径中搜索名为 filename 的文件,否则将在库路径中搜索名为 libnamespec.a 的文件。
在支持共享库的系统上,ld还可以搜索 libnamespec.a 以外的文件。具体来说,在ELF和SunOS系统上,ld会先在目录中搜索名为 libnamespec.so 的库,然后再搜索名为 * libnamespec.a* 的库。(按照惯例,扩展名为.so表示共享库。)请注意,此行为不适用于 :filename,它总是指定名为 filename 的文件。
换句话说,可以将库传递给 GNU链接器
1.按名称(基本路径或使用(绝对或相对)路径)
1.简式:
-ldummy
。在这种情况下,链接器将搜索 libdummy.so(或 libdummy.a)。
不用说,如果将 .lib 命名为 dummy.so(或 dummy.a),**#2. 将不起作用。

* 成功 * 生态系统

库仅按名称([MS.Learn]: .Lib Files as Linker Input)传递到默认(VStudio)链接器
然而,一些维护者添加lib 前缀只是为了与 Nix name保持一致。
所以,这只是一个约定,没有任何功能价值。
但是现在,为了缩小两个 OS 之间差距,Win多个 Nix 工具端口(MinGW-w64MSYS2Cygwin,...)。由于它们“服从”Nix 接口,因此可以使用缩写形式(来自上一章),这将保存很多麻烦,特别是在移植带有包含***-l***的 Makefile 的大型项目时。

3pvhb19x

3pvhb19x2#

这纯粹是一种约定,除了让人们知道它是一个库之外没有任何意义。您可以随意调用dll

相关问题