将库版本编译成.so文件
Compiling library version into .so file
我有一个 C linux API 库,我将它分发给最终用户和服务器。当用户需要使用这个库时,他们编译并构建一个 .so 文件,然后发送到我们的服务器成为 运行。我想要一种将库的版本号编译到他们的 .so 文件中的方法,这样我的服务器就可以检查他们编译的版本。这样如果服务器与用户的 .so 文件不兼容,我可以拒绝加载库。我不确定我什至需要什么选择来实现这一点,并希望得到任何类型的建议。如果有更多信息有助于解决此问题,请告诉我。
库通常有一个 getLibraryVersion
函数,该函数 returns 一些常量值,无论是字符串、整数还是其他。这将为您提供链接的版本(即您的 .so
版本)。你可以有一个额外的宏来获取你编译的版本(即你的服务器版本)。
例如,SDL 的 API 有一个版本结构,并且在其 headers 之一中定义了以下函数:
#define SDL_MAJOR_VERSION 1
#define SDL_MINOR_VERSION 2
#define SDL_PATCHLEVEL 15
typedef struct SDL_version {
Uint8 major;
Uint8 minor;
Uint8 patch;
} SDL_version;
/**
* This macro can be used to fill a version structure with the compile-time
* version of the SDL library.
*/
#define SDL_VERSION(X) \
{ \
(X)->major = SDL_MAJOR_VERSION; \
(X)->minor = SDL_MINOR_VERSION; \
(X)->patch = SDL_PATCHLEVEL; \
}
/**
* Use this function to get the version of SDL that is linked against
* your program.
*/
extern void SDL_GetVersion(SDL_version* ver);
在您 .so
的 .c
文件之一中:
void SDL_GetVersion(SDL_version* ver)
{
SDL_VERSION(ver);
}
使用示例:
SDL_version compiled;
SDL_version linked;
SDL_VERSION(&compiled);
SDL_GetVersion(&linked);
printf("We compiled against SDL version %d.%d.%d ...\n",
compiled.major, compiled.minor, compiled.patch);
printf("We are linking against SDL version %d.%d.%d.\n",
linked.major, linked.minor, linked.patch);
旁注; 运行 在您的服务器上使用其他人的代码有点危险。
我有一个 C linux API 库,我将它分发给最终用户和服务器。当用户需要使用这个库时,他们编译并构建一个 .so 文件,然后发送到我们的服务器成为 运行。我想要一种将库的版本号编译到他们的 .so 文件中的方法,这样我的服务器就可以检查他们编译的版本。这样如果服务器与用户的 .so 文件不兼容,我可以拒绝加载库。我不确定我什至需要什么选择来实现这一点,并希望得到任何类型的建议。如果有更多信息有助于解决此问题,请告诉我。
库通常有一个 getLibraryVersion
函数,该函数 returns 一些常量值,无论是字符串、整数还是其他。这将为您提供链接的版本(即您的 .so
版本)。你可以有一个额外的宏来获取你编译的版本(即你的服务器版本)。
例如,SDL 的 API 有一个版本结构,并且在其 headers 之一中定义了以下函数:
#define SDL_MAJOR_VERSION 1
#define SDL_MINOR_VERSION 2
#define SDL_PATCHLEVEL 15
typedef struct SDL_version {
Uint8 major;
Uint8 minor;
Uint8 patch;
} SDL_version;
/**
* This macro can be used to fill a version structure with the compile-time
* version of the SDL library.
*/
#define SDL_VERSION(X) \
{ \
(X)->major = SDL_MAJOR_VERSION; \
(X)->minor = SDL_MINOR_VERSION; \
(X)->patch = SDL_PATCHLEVEL; \
}
/**
* Use this function to get the version of SDL that is linked against
* your program.
*/
extern void SDL_GetVersion(SDL_version* ver);
在您 .so
的 .c
文件之一中:
void SDL_GetVersion(SDL_version* ver)
{
SDL_VERSION(ver);
}
使用示例:
SDL_version compiled;
SDL_version linked;
SDL_VERSION(&compiled);
SDL_GetVersion(&linked);
printf("We compiled against SDL version %d.%d.%d ...\n",
compiled.major, compiled.minor, compiled.patch);
printf("We are linking against SDL version %d.%d.%d.\n",
linked.major, linked.minor, linked.patch);
旁注; 运行 在您的服务器上使用其他人的代码有点危险。