2012-04-05 43 views
5

Cách duy nhất tôi biết làm thế nào để làm điều này là chuyển đổi tệp thành tệp nguồn C với một mảng byte/char chứa nội dung của tệp tài nguyên trong hex.Làm cách nào để nhúng tệp tài nguyên vào C?

Có cách nào tốt hơn hoặc dễ hơn để thực hiện việc này không?

+5

Trên nền tảng nào? –

+0

@OliCharlesworth: Tôi đang chạy trên một RTOS nhúng độc quyền, sử dụng Eclipse 3.0.2 – theanine

+2

Hy vọng rằng, bạn sẽ biết rằng câu trả lời cho vấn đề này phụ thuộc hoàn toàn ** vào các chi tiết cụ thể của chuỗi công cụ bạn đang sử dụng (trình biên dịch, trình liên kết, định dạng có thể thực thi, v.v.). Vì vậy, bạn sẽ làm tốt để thêm càng nhiều chi tiết càng tốt cho câu hỏi của bạn. –

Trả lời

3

Đây là mẹo hay mà tôi sử dụng với trình biên dịch chéo gcc-arm; bao gồm một tập tin thông qua một tập tin ngôn ngữ lắp ráp. Trong ví dụ này, nội dung của tệp là public_key.pem Tôi đang đưa vào.

pubkey.s

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

tương ứng 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 

Bây giờ các nguồn C có thể bao gồm pubkey.h, biên dịch pubkey.s với gcc và liên kết nó vào ứng dụng của bạn, và có bạn đi. sizeof(pubkey) cũng hoạt động.

+1

Câu trả lời thú vị. Cảm ơn. – theanine

+0

Sizeof hoạt động như thế nào? Không phải là sizeof đánh giá tại thời gian biên dịch, nơi mà các nội dung của pubkey.s thậm chí sẽ không được xem xét? EDIT: Bạn có nghĩa là strlen? – thenickdude

2

Cách bạn mô tả là tốt nhất/dễ nhất/di động nhất. Chỉ cần viết một công cụ nhanh (hoặc tìm một công cụ hiện có) để tạo các tệp C cho bạn. Và đảm bảo bạn sử dụng đúng các từ khóa const (và có thể là static) khi bạn thực hiện hoặc chương trình của bạn sẽ lãng phí một lượng lớn bộ nhớ.

0

Tôi cần một cái gì đó như thế này một thời gian trước và tôi đã tạo ra một công cụ cho việc này. Đó là công cụ python được gọi là mkcres (https://github.com/jahnf/mkcres) và tôi đặt nó trên github.

  • Mặc dù tài liệu thiếu một chút, có các ví dụ về cách tích hợp nó vào quá trình xây dựng với CMake hoặc tạo tệp đơn giản.
  • Lấy tệp .json làm cấu hình tạo tệp tài nguyên
  • Nó có thể phát hiện các thay đổi trên tệp tài nguyên và tự động tạo lại các tệp C tương ứng nếu cần.
  • Nhược điểm: Bạn sẽ cần python (2 hoặc 3)
  • Upside: Không phải trình biên dịch cụ thể, nên hoạt động với mọi trình biên dịch C/C++.
Các vấn đề liên quan