Как сохранить номер версии в статической библиотеке?

Эти уравнения от Википедия делает его более простым/больше эффективный для вычисления оценок Elo, алгоритм для изображений A и B был бы прост:

  • Получают Ne, мА, МБ и РА оценок, RB от Вашей базы данных.
  • Вычисляют KA, КБ, QA, QB при помощи количества сравнений, выполненных (Ne) и количество раз, что изображение было сравнено (m) и номинальные токи:

K

QA

QB

  • Вычисляют EA и EB.

EA

EB

  • Счет S победителя: победитель как 1, проигравший как 0, и если Вы закуриваете как 0,5,
  • , Вычисляет новые оценки для обоих использований: New Rating

  • Обновление новый РА оценок, RB и мА количеств, МБ в базе данных.

8
задан linuxbuild 6 May 2011 в 20:14
поделиться

3 ответа

Возможно вы можете создать строку с такой версией:

char* library_version = { "Version: 1.3.6" };

и чтобы иметь возможность проверить ее из оболочки, просто используйте:

strings library.a | grep Version | cut -d " " -f 2
9
ответ дан 5 December 2019 в 07:35
поделиться

В дополнение к предоставлению статической строки, как упоминалось Puppe, обычной практикой является предоставление макроса для получения проверки версии на совместимость. Например, у вас могут быть следующие макросы (объявленные в файле заголовка для использования с вашей библиотекой):

#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))

Обратите внимание на макрос MYLIB_CHECK_VERSION , я предполагаю, что вам нужна определенная основная версия и второстепенная версия больше или равна вашей желаемой версии. Измените, как требуется для вашего приложения.

Затем используйте его из вызывающего приложения, например:

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

Этот подход приведет к тому, что информация о версии будет поступать из включенного файла заголовка. Кроме того, он будет оптимизирован во время компиляции для вызывающего приложения. Немного поработав, вы можете извлечь его из самой библиотеки. Читать дальше...

Вы также можете использовать эту информацию для создания статической строки, хранящейся в вашей библиотеке, как упоминал Puppe. Поместите что-то вроде этого в свою библиотеку:

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
};

Это создаст в вашей библиотеке структуру с именем mylib_version . Вы можете использовать это для дальнейших проверок путем создания функций внутри вашей библиотеки и доступа к ним из вызывающего приложения и т. Д.

10
ответ дан 5 December 2019 в 07:35
поделиться

Creating a new answer based on your edit... Just to avoid confusion :)

If you are looking for a non-code way to solve the problem, you could try this. It's (yet again) an alternative to the strings approach defined by Puppe.

Maybe you could just touch a file called version_1.2.3 and add it to the archive. Then, you could determine the version by looking for the version file using the ar command:

ar t libmylib.a | grep 'version_' | sed -e 's/^version_//'

I'm not sure if that will get you what you need, but there is no standard method for embedding metadata like this in an archive. Maybe you'll find other information you want to store in this "metafile" for the archive.

3
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: