Единственный способ, которым я знаю, как это сделать, - преобразовать файл в исходный файл C с одним массивом байтов/символов, содержащим содержимое файла ресурсов в шестнадцатеричном формате.
Есть ли лучший или более простой способ сделать это?
Единственный способ, которым я знаю, как это сделать, - преобразовать файл в исходный файл C с одним массивом байтов/символов, содержащим содержимое файла ресурсов в шестнадцатеричном формате.
Есть ли лучший или более простой способ сделать это?
Вот хороший трюк, который я использую с кросс-компилятором gcc-arm; включая файл через файл языка ассемблера. В этом примере я включаю содержимое файла public_key.pem.
pubkey.s
.section ".rodata"
.globl pubkey
.type pubkey, STT_OBJECT
pubkey:
.incbin "public_key.pem"
.byte 0
.size pubkey, .-pubkey
соответствующий pubkey.h
#ifndef PUBKEY_H
#define PUBKEY_H
/*
* This is a binary blob, the public key in PEM format,
* brought in by pubkey.s
*/
extern const char pubkey[];
#endif // PUBKEY_H
Теперь исходники C могут включать pubkey.h, скомпилировать pubkey.s с помощью gcc и связать его с вашим приложением, и все готово. sizeof(pubkey) тоже работает.
.size, вероятно, делает этот трюк.
- person Daniel Jour; 30.10.2019
pubkey_size: .int (. - pubkey) сразу после .size; и конечно же .globl pubkey_size и .type pubkey_size, STT_OBJECT. Используется через extern const int pubkey_size;
- person Daniel Jour; 01.11.2019
Способ, который вы описали, является лучшим/самым простым/самым портативным. Просто напишите быстрый инструмент (или найдите существующий) для создания файлов C для вас. И убедитесь, что вы правильно используете ключевые слова const (и, возможно, static), когда делаете это, иначе ваша программа будет тратить много памяти.
Мне нужно было что-то подобное некоторое время назад, и я создал инструмент для этого. Это инструмент Python под названием mkcres (https://github.com/jahnf/mkcres) и выложил на github.