【发布时间】:2014-04-24 20:13:55
【问题描述】:
我有一个本地 C++ 静态库。我在 Windows 中使用 Visual Studio 2012,在 Linux 中使用 Eclipse。
是否有任何内置功能可以提供静态库版本信息?
我尝试按照我为 C++/CLI 库使用的 steps 进行操作,但它似乎没有任何效果。
它可以构建,但我在任何地方都看不到版本。
如何为静态库设置版本信息?
- Visual Studio 中是否有为此目的的内置功能?
- 如果不是,设置版本信息的正确方法是什么?有什么最佳做法吗?
- 您如何在 Linux 上做到这一点? (我将 Windows 的库构建为 *.lib 文件,将 Linux 的库构建为 .a 文件,我需要保留版本信息)
更新
这是 Paul 建议的带有 SpecialBuild 的 VersionInfo。该字段不会显示在任何地方。
VS_VERSION_INFO VERSIONINFO
FILEVERSION 61,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x21L
#else
FILEFLAGS 0x20L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040004b0"
BEGIN
VALUE "CompanyName", "TODO: <Company name>"
VALUE "FileDescription", "TODO: <File description>"
VALUE "FileVersion", "61.0.0.1"
VALUE "InternalName", "ExxonMobil.Rapid.Services.TEM"
VALUE "LegalCopyright", "Copyright (C) 2014"
VALUE "OriginalFilename", "ExxonMobil.Rapid.Services.TEM"
VALUE "ProductName", "TODO: <Product name>"
VALUE "ProductVersion", "1.0.0.1"
VALUE "SpecialBuild ", "Blah"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x400, 1200
END
END
【问题讨论】:
-
Linux 的静态库是
.a文件,而不是.so -
@BenVoigt,是的,你是对的,我在考虑共享库,抱歉,我会修复它
-
VersionInfo结构通常用于可执行和动态库文件,而不用于静态库。原因是静态库和程序中的任何模块都没有引用该资源,因此链接器将其优化掉。您必须确保资源符号是公开的,并添加一个应用程序可以调用的库方法来检索结构或结构的一部分。
标签: c++ visual-studio-2012 static-libraries