第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用GCC的C / C ++:靜態(tài)地將資源文件添加到可執(zhí)行文件/庫

使用GCC的C / C ++:靜態(tài)地將資源文件添加到可執(zhí)行文件/庫

梵蒂岡之花 2019-07-31 15:39:45
使用GCC的C / C ++:靜態(tài)地將資源文件添加到可執(zhí)行文件/庫有沒有人知道如何使用GCC將任何資源文件靜態(tài)編譯到可執(zhí)行文件或共享庫文件中?例如,我想添加永遠(yuǎn)不會改變的圖像文件(如果他們這樣做,我不得不替換文件),并且不希望它們在文件系統(tǒng)中存在。如果這是可能的(我認(rèn)為這是因為Visual C ++ for Windows也可以這樣做),我如何加載存儲在自己的二進(jìn)制文件中的文件?可執(zhí)行文件是否解析自身,找到文件并從中提取數(shù)據(jù)?也許GCC有一個選項,我還沒有見過。使用搜索引擎并沒有真正吐出正確的東西。我需要這個用于共享庫和普通的ELF可執(zhí)行文件。任何幫助表示贊賞
查看完整描述

3 回答

?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗 獲得超6個贊

使用imagemagick

convert file.png data.h

給出類似的東西:

/*
  data.h (PNM).
*/static unsigned char
  MagickImage[] =
  {
    0x50, 0x36, 0x0A, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 
    0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4D, 0x50, 0x0A, 0x32, 0x37, 
    0x37, 0x20, 0x31, 0x36, 0x32, 0x0A, 0x32, 0x35, 0x35, 0x0A, 0xFF, 0xFF, 
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, ....

為了與其他代碼兼容,您可以使用它fmemopen來獲取“常規(guī)” FILE *對象,或者std::stringstream使用iostream。std::stringstream雖然不是很好,你當(dāng)然可以在任何可以使用迭代器的地方使用指針。

如果你在automake中使用它,請不要忘記適當(dāng)?shù)?a >設(shè)置BUILT_SOURCES。

這樣做的好處是:

  1. 你得到文本,所以它可以在版本控制和補丁明智

  2. 它在每個平臺上都是可移植的并且定義良好


查看完整回答
反對 回復(fù) 2019-07-31
?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗 獲得超3個贊

我已經(jīng)開始喜歡John Ripley .incbin基于程序集的解決方案提供的控件,現(xiàn)在使用一個變體。

我使用objcopy(GNU binutils)將文件foo-data.bin中的二進(jìn)制數(shù)據(jù)鏈接到可執(zhí)行文件的數(shù)據(jù)部分:

objcopy -B i386 -I binary -O elf32-i386 foo-data.bin foo-data.o

這為您提供了一個foo-data.o可以鏈接到可執(zhí)行文件的目標(biāo)文件。C界面看起來像

/** created from binary via objcopy */extern uint8_t foo_data[]      asm("_binary_foo_data_bin_start");extern uint8_t foo_data_size[] asm("_binary_foo_data_bin_size");extern uint8_t foo_data_end[]  asm("_binary_foo_data_bin_end");

所以你可以做類似的事情

for (uint8_t *byte=foo_data; byte<foo_data_end; ++byte) {
    transmit_single_byte(*byte);}

要么

size_t foo_size = (size_t)((void *)foo_data_size);void  *foo_copy = malloc(foo_size);assert(foo_copy);memcpy(foo_copy, foo_data, foo_size);

如果您的目標(biāo)體系結(jié)構(gòu)對存儲常量和可變數(shù)據(jù)的位置有特殊約束,或者您希望將該數(shù)據(jù)存儲在.text段中以使其適合與程序代碼相同的內(nèi)存類型,則可以objcopy更多地使用這些參數(shù)。


查看完整回答
反對 回復(fù) 2019-07-31
  • 3 回答
  • 0 關(guān)注
  • 1196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號