是否可以强制将静态库中的字符串包含到链接它的任何可执行文件中?

Zri*_*rin 5 c static-libraries static-linking

我想将版本字符串放入静态链接库中,并强制将其包含在链接它的任何可执行文件的映像中,这样我就可以检查映像(例如使用strings)并查看版本字符串。

使用标准 C 和/或 gcc 是否可以实现这一点,而不需要专门调整可执行文件的链接选项?(因为调整使用这些静态库的可执行文件的链接很容易忘记/维护起来很繁琐......)

看来我已经成功地在 C++ 中实现了这一点

extern char const * that_version_string;
static char const * const foo_that_version_string = that_version_string;
Run Code Online (Sandbox Code Playgroud)

在库的头文件中。但 C 不会编译这个:“非常量初始值设定项”或类似的东西。

use*_*109 1

假设该库foo有一个初始化函数fooInit必须调用该函数才能使用该库。然后,在该函数中输入以下代码。

char const * that_version_string = "Foo 1.0";
char const * this_version_string;

void fooInit( void )
{
    this_version_string = that_version_string;

    // more initialization code ...
}
Run Code Online (Sandbox Code Playgroud)

编译库时请务必检查汇编代码,以验证编译器没有优化分配。它不应该,因为this_version_string它是一个可能在其他地方使用的全局变量。