2012-04-05 50 views
5

我知道如何做到這一點的唯一方法是將文件轉換爲C源文件,其中包含以十六進制格式包含資源文件內容的單個字節/字符數組。你如何在C中嵌入資源文件?

有沒有更好或更簡單的方法來做到這一點?

+5

在什麼平臺上? – 2012-04-05 22:18:41

+0

@OliCharlesworth:我正在使用專有的嵌入式實時操作系統,使用Eclipse 3.0.2 – theanine 2012-04-05 22:36:54

+2

希望你能意識到這個問題的答案完全取決於你正在使用的工具鏈的細節**編譯器,鏈接器,可執行格式等)。所以你最好儘可能在你的問題上添加儘可能多的細節。 – 2012-04-05 22:38:10

回答

3

下面是一個很好的技巧,我用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,用gcc編譯pubkey.s並將其鏈接到你的應用程序,你去了。 sizeof(pubkey)也有效。

+1

真棒回答。謝謝。 – theanine 2012-04-06 19:55:30

+0

sizeof如何工作? sizeof是否在編譯時評估,其中pubkey.s的內容甚至不會被考慮?編輯:你的意思是strlen? – thenickdude 2014-11-21 07:10:29

2

你描述的方式是最好的/最簡單的/最便攜的。只需編寫一個快速工具(或找到現有的工具)來爲您生成C文件。確保您正確使用const(可能還有static)關鍵字,否則程序將浪費大量內存。

0

前段時間我需要這樣的東西,我爲此創建了一個工具。 這是一個叫做mkcreshttps://github.com/jahnf/mkcres)的python工具,我把它放在github上。

  • 儘管文檔缺乏一點,但有一些例子說明如何將它與CMake或純文件構建文件集成到構建過程中。
  • 將.json文件作爲資源文件生成配置
  • 它可以檢測資源文件的更改,並根據需要自動重新生成相應的C文件 。
  • 缺點:您需要python(2或3)
  • 上行鏈路:不是編譯器特定的,應該適用於每個C/C++編譯器。