2012-04-05 26 views
5

Jedyny sposób, w jaki wiem, jak to zrobić, to przekonwertować plik do pliku źródłowego C za pomocą tablicy jednobajtowej/char zawierającej zawartość pliku zasobów w języku heksadecymalnym.W jaki sposób osadzasz pliki zasobów w C?

Czy istnieje lepszy lub łatwiejszy sposób na zrobienie tego?

+5

Na jakiej platformie? –

+0

@OliCharlesworth: Używam zastrzeżonego wbudowanego systemu plików RTOS, używając Eclipse 3.0.2 – theanine

+2

Mamy nadzieję, że odpowiedź na ten problem zależy ** od specyfiki używanego toolchaina (kompilator, linker, format pliku wykonywalnego itp.). Więc dobrze byłoby, aby dodać jak najwięcej szczegółów do swojego pytania. –

Odpowiedz

3

Oto dobra sztuczka, której używam z kompilatorem krzyżowym gcc-arm; w tym plik poprzez plik języka asemblerowego. W tym przykładzie jest to zawartość pliku public_key.pem.

pubkey.s

.section ".rodata" 
.globl pubkey 
.type pubkey, STT_OBJECT 
pubkey: 
.incbin "public_key.pem" 
.byte 0 
.size pubkey, .-pubkey 

odpowiadające 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 

Teraz źródła C mogą zawierać pubkey.h, skompilować pubkey.s z gcc i połączyć je w swojej aplikacji, a proszę bardzo. sizeof(pubkey) również działa.

+1

Niesamowita odpowiedź. Dzięki. – theanine

+0

Jak działa sizeof? Czy sizeof nie jest oceniany w czasie kompilacji, gdzie zawartość pubkey.s nie będzie nawet brana pod uwagę? EDYCJA: Czy chodzi ci o strlen? – thenickdude

2

Opisany przez Ciebie sposób jest najlepszy/najłatwiejszy/najbardziej przenośny. Wystarczy napisać szybkie narzędzie (lub znaleźć już istniejące), aby wygenerować pliki C dla siebie. Upewnij się, że poprawnie użyłeś słów kluczowych const (i prawdopodobnie static), ponieważ w przeciwnym razie twój program zmarnuje duże ilości pamięci.

0

Potrzebowałem czegoś takiego już jakiś czas temu i stworzyłem na to narzędzie. To narzędzie Pythona o nazwie mkcres (https://github.com/jahnf/mkcres) i umieściłem go na github.

  • Chociaż brakuje trochę dokumentacji, istnieją przykłady, jak zintegrować ją w procesie kompilacji z CMake lub zwykłymi plikami.
  • Uruchamia plik .json jako konfigurację generowania pliku zasobów
  • Umożliwia wykrywanie zmian w plikach zasobów i automatyczne generowanie odpowiednich plików C, jeśli to konieczne.
  • Wadą: Będziesz potrzebował pythona (2 lub 3)
  • Upside: nie dotyczy konkretnego kompilatora, powinien działać z każdym kompilatorem C/C++.