我正在编译Linux库(对于
Android,使用NDK的g,但我敢打赌,我的问题对于任何Linux系统都是有道理的).将这些图书馆交付给合作伙伴时,我需要使用版本号码进行标记.我还必须能够以编程方式访问版本号(例如在“关于”对话框或GetVersion函数中显示).
我首先使用unversioned标志(版本0.0)来编译库,当我在发送给合作伙伴之前完成测试时,需要将此版本更改为真实的.我知道修改源代码并重新编译会更容易,但是我们不想这样做(因为我们应该再次测试一遍,如果我们重新编译代码,我们觉得这样会更容易出错,看到这个意见post,最后因为我们的开发环境是这样工作的:我们为Windows二进制程序做这个过程:我们设置一个0.0资源的版本字符串(.rc),然后我们使用verpatch改变它…我们想使用相同的运送Linux二进制文件时的进程).
这里最好的策略是什么?
总而言之,要求是:
>使用“未设置”版本编译二进制文件(0.0或其他)
>可以将这个“未设置”版本修改为特定的版本,而无需重新编译二进制文件(理想情况下,运行第三方工具命令,如同Windows下的verpatch一样)
>可以让库代码在运行时检索它的版本信息
如果您的答案是“.so”,那么请提供一个解决方案3:如何在运行时检索版本名称(即文件名).
我在想一些解决方案,但不知道他们是否可以工作,如何实现它们.
>在代码中有一个版本变量(一个字符串或3个int),并且有一种方法可以在二进制文件中更改它?使用二进制sed …?
>在资源中有一个版本变量,并有一种方法可以在二进制文件中更改它? (正如我们为win32 / win64)
>使用专用于.so(如SONAME)的字段,并具有允许更改它的工具,并使其可从C代码访问.
>重命名lib更改SONAME(没有找到如何实现)…并找到一种从C代码检索它的方法.
> …
请注意,我们使用QtCreator来编译Android .so文件,但是它们可能不依赖于Qt.所以使用Qt资源不是一个理想的解决方案.