切换至语义化版本导致MSVC链接器抛出LNK1117错误
MSVC链接器版本号限制与语义化版本兼容方案
MSVC链接器的VERSION命令行选项确实只支持major.minor两位格式的版本号,这就是你输入0.16.0触发LINK : fatal error LNK1117错误的原因,但这不代表MSVC完全不支持语义化版本方案,只是得换个方式配置。
解决方法:
用资源文件配置完整语义化版本
语义化版本的三位号(major.minor.patch)可以通过Windows资源文件(.rc)来配置,这是官方推荐的标准方式。在资源文件里添加版本信息块就行,示例代码如下:VS_VERSION_INFO VERSIONINFO FILEVERSION 0,16,0,0 PRODUCTVERSION 0,16,0,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "FileVersion", "0.16.0.0" VALUE "ProductVersion", "0.16.0.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END把这个资源文件添加到你的项目中,链接器会自动读取这里的版本信息。同时你可以把链接器配置里的
VERSION选项保留为0.16,或者直接移除该选项——因为资源文件已经提供了完整的版本信息。分清两个版本字段的区别
链接器的VERSION选项控制的是PE文件头"可选头"里的版本号,这个字段天生只支持两位;而语义化版本的完整三位(甚至更多后缀),可以存储在资源节的版本信息中,这部分是Windows系统文件属性里显示的版本号,完全支持语义化格式。
简单说:MSVC完全支持语义化版本,只是不能直接通过链接器的VERSION选项配置三位号,改用资源文件就能搞定。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

