次のように、リンカー オプションを使用--format
し-Wl,
てリンカーに渡すことができます。
gcc -Wl,--format=binary -Wl,myfile.bin -Wl,--format=default
最後にフォーマットをデフォルトに設定すると、リンカを標準入力フォーマットに戻すことができます。
ソースからバイナリ リソースにアクセスするには、次のような単純な_binary_myfile_bin_start
アセンブラ シンボル ( for myfile.bin
、 forxxx.yyy
と) を使用します_binary_xxx_yyy_start
。_binary_xxx_yyy_end
extern uint8_t data[] asm("_binary_myfile_bin_start");
そして次の使用data
。自分で objcopy を実行するか、リソース ハッキングを使用するよりもはるかに優れています。
UPD: ちょっとした例で展開 -- メインは、独自のオブジェクト ファイルの最初の 4 バイトを出力します。
#include "stdio.h"
#include "stdint.h"
extern uint8_t data[] asm("_binary_main_o_start");
int
main(void)
{
fprintf(stdout, "0x%x, 0x%x, 0x%x, 0x%x\n", data[0], data[1], data[2], data[3]);
return 0;
}
run をコンパイルします。
$ gcc -o main.o -c main.c
$ gcc -o main main.o -Wl,--format=binary -Wl,main.o -Wl,--format=default
$ ./main
0x7f, 0x45, 0x4c, 0x46