Я хотел бы поместить строку версии в статически связанную библиотеку и обеспечить, чтобы она включалась в образ любого исполняемого файла, который ее связывает, поэтому я могу проверить изображение (например, strings
) и посмотреть строку версии.Можно ли обеспечить включение строки из статической библиотеки в любой исполняемый файл, который связывает его?
Возможно ли это со стандартом C и/или gcc и без необходимости специально настраивать параметры компоновки исполняемого файла? (Потому что регулируя связывание исполняемых файлов, которые используют эти статические библиотеки является то, что легко забыть/утомительно поддерживать ...)
Кажется, мне удалось добиться этого в C++ с
extern char const * that_version_string;
static char const * const foo_that_version_string = that_version_string;
в файле заголовков библиотек. Но C не скомпилирует это: «неконтинентальный инициализатор» или что-то в этом роде.
Вы имеете в виду статически связанную библиотеку? Потому что если так, связанный exe будет включать в себя библиотечный код, и, следовательно, ваша строка версии библиотеки уже будет в файле. –
@Peter M: Да, статически связанный. Связанный exe будет содержать только ссылки/используемые объекты из библиотеки, а не все объекты. Я не хочу изменять это поведение для любых объектов, кроме этой строки версии. Например. exe должен по-прежнему содержать только необходимые функции из библиотеки. – Zrin
Почему бы вам просто не добавить в библиотеку 'const char * Version() {return" your_version_str ";}'? Строка (константа) будет находиться в секции данных RO объекта кода библиотеки, и функция будет возвращать указатель на эту строку всякий раз, когда она вызывается. –