如何验证C++库在Linux(.so)和Windows(.dll)下的版本设置正确性?
验证Linux .so与Windows .dll库的版本号方法
你已经通过CMake为项目设置了版本信息:
project ("TestProject" VERSION 999.999.999 LANGUAGES C CXX) add_subdirectory ("TestProject") set_target_properties("TestProject" PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
以下是针对两种平台的版本验证方法,同时补充Windows下的CMake配置优化建议:
Linux 下验证 .so 文件版本
- 直接查看文件命名:构建后会生成多个关联文件,比如
libTestProject.so.999.999.999(完整版本的实际库文件)、libTestProject.so.999(关联主版本的软链接)、libTestProject.so(默认链接的软链接),从文件名可直接确认版本。 - 使用
readelf命令:执行以下命令提取版本相关信息
输出会包含SONAME(对应readelf -d libTestProject.so | grep -E '(Version|SONAME)'SOVERSION设置)和库的完整版本号。 - 使用
objdump命令:通过以下命令查看版本段内容objdump -p libTestProject.so | grep -A2 Version
Windows 下验证 .dll 文件版本
注意:默认CMake的VERSION属性不会自动为Windows DLL添加版本资源,需先补充配置(见下文),再通过以下方法验证:
- 图形界面查看:右键目标.dll文件 → 属性 → 详细信息,在「文件版本」「产品版本」栏可查看对应版本号。
- 使用
dumpbin工具(Visual Studio自带):打开VS开发者命令提示符,执行
在输出的「File Version」「Product Version」字段获取版本;也可执行dumpbin /headers TestProject.dlldumpbin /resources TestProject.dll查看完整的版本资源内容。 - PowerShell命令:执行以下命令直接输出版本信息
Get-Item TestProject.dll | Select-Object -ExpandProperty VersionInfo
Windows下CMake版本资源补充配置
创建version.rc.in模板文件:
#include <windows.h> VS_VERSION_INFO VERSIONINFO FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "FileVersion", "@PROJECT_VERSION@\0" VALUE "ProductVersion", "@PROJECT_VERSION@\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END
在CMakeLists.txt中添加配置:
if(WIN32) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/version.rc @ONLY ) target_sources(TestProject PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/version.rc) endif()
内容的提问来源于stack exchange,提问作者165plo
相关产品推荐
相关产品推荐

