2010-01-27 137 views
2

我有一个库,我建立并释放给客户。该平台是Linux。我想知道是否有任何方法来生成库版本和构建版本的一部分?这将帮助我将不同客户报告的任何问题与特定版本的版本进行联合关联。生成库版本和内部版本

谢谢。

回答

2

有2个选项:

  1. 嵌入的版本信息进库,例如名libmy.so.1.2,它应该在您的安装中软链接到libmy.so以便能够在运行时解决它。修改您的构建工具以适应此。这是一种常用的方法,但不适合构建标签。

  2. 您可以尝试通过静态字符串将版本信息嵌入到您的库中。在Unix上,您没有版本信息资源(如在Windows上),所以这是实现它的唯一方法。可能的做法可以是:

a。像这样的东西创建一个C/C +源文件(version.cxx):

#include <version.h> 
static char version_stamp[]="\[email protected](#) " PRODUCT " " VERSION " " BUILD_NUMBER; 

(根据您的需要改变格式)

湾创建version.h,在其中定义PRODUCT/VERSION/BUILD_NUMBER宏的值。您可以生成/修改此标题作为构建过程的一部分或手动修改它。例如:

#define PRODUCT   "MyProduct" 
#define VERSION   "1.2.1" 
#define BUILD_NUMBER "241" 

c。确保您的C/C++版本文件(version.cxx)链接到产品中的每个库/可执行文件中。根据需要修改构建工具。

然后在链接库中,你可以使用这个命令来获得它的版本:

strings libmy.so | grep '@(#)' 

如果您在计算机上安装了SCCS(一些Unix系统做),你可以运行:

what libmy.so 

(这就是为什么我使用上面的@(#)前缀)

顺便说一句,在Windows上可以使用相同的方法:只需将上述头文件包含在带有版本资源定义的.rc文件中将.rc链接到产品中的每个二进制文件中)。因此,您可以在一个地方定义版本,并在所有平台和所有二进制文件上共享。 (2)的另一个好处是,在必要时(例如,在日志文件中),您可以在运行时代码中使用上述头部的版本宏。