How to store a version number in a static library?

后端 未结 5 1694
一整个雨季
一整个雨季 2021-01-02 16:47

How can I store a version number in a static library (file.a) and later check for its version in Linux?

P.S. I need possibility to check version of file any time wit

5条回答
  •  遥遥无期
    2021-01-02 17:08

    In addition to providing a static string as mentioned by Puppe, it is common practice to provide a macro to retrieve the version check for compatibility. For example, you could have the following macros (declared in a header file to be used with your library):

    #define MYLIB_MAJOR_VERSION 1
    #define MYLIB_MINOR_VERSION 2
    #define MYLIB_REVISION 3
    #define MYLIB_VERSION "1.2.3"
    #define MYLIB_VERSION_CHECK(maj, min) ((maj==MYLIB_MAJOR_VERSION) && (min<=MYLIB_MINOR_VERSION))
    

    Notice with the MYLIB_CHECK_VERSION macro, I'm assuming you want a specific major rev and a minor rev greater than or equal to your desired version. Change as required for your application.

    Then use it from a calling application, something like:

    if (! MYLIB_VERSION_CHECK(1, 2)) {
        fprintf(stderr, "ERROR: incompatible library version\n");
        exit(-1);
    }
    

    This approach will cause the version information to come from the included header file. Additionally, it will be optimized at compile time for the calling application. With a little more work, you can extract it from the library itself. Read on...

    You can also use this information to create a static string stored inside your library, as mentioned by Puppe. Place something like this inside your library:

    struct {
        const char* string;
        const unsigned major;
        const unsigned minor;
        const unsigned revision;
    } mylib_version = {
        MYLIB_VERSION, MYLIB_MAJOR_VERSION, MYLIB_MINOR_VERSION, MYLIB_REVISION
    };
    

    This will create a struct called mylib_version in your library. You can use this to do further verifications by creating functions inside your library and accessing those from a calling application, etc.

提交回复
热议问题