为何部分Windows C++ dll文件名称带有lib前缀,如libxml2.dll?
为什么部分C++ DLL会带lib前缀?
这个命名惯例没有强制行业标准,本质是跨平台开发的历史遗留习惯,主要有两个常见的来源:
- 最早起源于Unix/Linux生态的库命名规则:Linux下静态库默认命名为
lib<库名>.a,动态库默认命名为lib<库名>.so,这套规则被MinGW、CMake、Autotools等常用跨平台构建工具默认继承了。很多跨平台开源库(比如你提到的libxml2)编译Windows版本时,开发者没有特意修改默认命名配置,就直接把lib前缀带到了DLL文件名里。 - 部分场景是为了避免重名冲突:如果同一个库要同时发布静态编译版本和动态编译版本,通常会用不带
lib前缀的xxx.lib作为静态库文件名,带lib前缀的libxxx.dll+配套的libxxx.lib导入库作为动态库版本,避免两类库重名导致链接出错。也有少数情况是为了和微软官方、系统自带的同功能库做区分,防止加载时找错文件。
要注意这个前缀只和编译配置有关,对DLL本身的功能、调用逻辑没有任何影响,只要调用侧的导入库匹配、或者动态加载时写对文件名就能正常使用。
内容的提问来源于stack exchange,提问作者Rohan Uprety
相关产品推荐
相关产品推荐

