如何在Linux下使用MinGW交叉编译C++ DLL时添加版本等元信息
Linux环境MinGW交叉编译DLL添加元信息方案
Windows DLL的元信息通过资源脚本(.rc)嵌入,Linux下MinGW交叉编译链自带的windres工具可直接完成资源编译、链接全流程,无需依赖Windows或Visual Studio工具,具体操作如下:
1 编写资源脚本
创建后缀为.rc的资源文件(示例命名为version.rc),按照需求修改对应字段即可:
VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN // 0804对应简体中文,英文可改为0409;04b0对应1200 Unicode编码 BLOCK "080404b0" BEGIN VALUE "CompanyName", "开发者/组织名称" VALUE "FileDescription", "DLL功能描述" VALUE "FileVersion", "1.0.0.0" VALUE "InternalName", "DLL内部名称" VALUE "LegalCopyright", "版权声明,例:Copyright © 2024 XXX" VALUE "OriginalFilename", "最终生成的DLL文件名,例:demo.dll" VALUE "ProductName", "所属产品名称" VALUE "ProductVersion", "1.0.0.0" END END BLOCK "VarFileInfo" BEGIN // 和上方编码对应,简体中文为0x804, 1200,英文为0x409, 1200 VALUE "Translation", 0x804, 1200 END END
2 编译资源文件为目标对象
使用和目标DLL架构匹配的windres工具编译rc文件:
- 64位DLL:
x86_64-w64-mingw32-windres version.rc -O coff -o version.res - 32位DLL:
i686-w64-mingw32-windres version.rc -O coff -o version.res
3 链接资源到DLL
将生成的version.res当做普通源码/目标文件加入编译链接命令即可:
直接用g++编译示例
x86_64-w64-mingw32-g++ -shared -o demo.dll demo.cpp version.res -lstdc++
CMake项目配置示例
直接将rc文件加入add_library的源文件列表即可,CMake会自动调用对应windres完成编译链接:
add_library(demo SHARED demo.cpp version.rc)
验证效果
- 放到Windows环境下,右键点击DLL选择「属性」-「详细信息」即可看到所有配置的元信息
- Linux环境下可通过
objdump -x demo.dll查看资源段确认嵌入成功
内容的提问来源于stack exchange,提问作者m4l490n
相关产品推荐
相关产品推荐

