You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证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命令:执行以下命令提取版本相关信息
    readelf -d libTestProject.so | grep -E '(Version|SONAME)'
    
    输出会包含SONAME(对应SOVERSION设置)和库的完整版本号。
  • 使用objdump命令:通过以下命令查看版本段内容
    objdump -p libTestProject.so | grep -A2 Version
    

Windows 下验证 .dll 文件版本

注意:默认CMake的VERSION属性不会自动为Windows DLL添加版本资源,需先补充配置(见下文),再通过以下方法验证:

  • 图形界面查看:右键目标.dll文件 → 属性 → 详细信息,在「文件版本」「产品版本」栏可查看对应版本号。
  • 使用dumpbin工具(Visual Studio自带):打开VS开发者命令提示符,执行
    dumpbin /headers TestProject.dll
    
    在输出的「File Version」「Product Version」字段获取版本;也可执行dumpbin /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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:17:32