为什么有些C++ dll名称以 lib 为前缀,例如libxml2.dll?这有什么意义吗?
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-w64,MSYS2,Cygwin,...)。由于它们“服从”Nix 接口,因此可以使用缩写形式(来自上一章),这将保存很多麻烦,特别是在移植带有包含***-l***的 Makefile 的大型项目时。
3pvhb19x2#
这纯粹是一种约定,除了让人们知道它是一个库之外没有任何意义。您可以随意调用dll
2条答案
按热度按时间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-w64,MSYS2,Cygwin,...)。由于它们“服从”Nix 接口,因此可以使用缩写形式(来自上一章),这将保存很多麻烦,特别是在移植带有包含***-l***的 Makefile 的大型项目时。
3pvhb19x2#
这纯粹是一种约定,除了让人们知道它是一个库之外没有任何意义。您可以随意调用dll