我製作的一個小程序包含很多小的位圖和聲音片段,我希望將它們包含到二進制文件本身中(它們需要存儲器映射)。在MS PE/COFF標準中,有關於如何包含具有良好文件系統層次結構的資源(.rsrc部分)的具體描述。我在Linux ELF規範中沒有找到類似的東西,因此我認爲可以自由地包含這些資源。將資源添加到ELF對象,分組在一個部分
我想要實現的是,我可以在每個資源的開頭只包含一個帶有符號名稱的ELF部分中的所有資源(以便我可以從我的C代碼中解決它們)。我現在正在做的是使用具有以下佈局的小NASM文件:
SECTION .rsrc
_resource_1:
incbin "../rsrc/file_name_1"
_resource_1_length:
dw $-resource_1
_resource_2:
incbin "../rsrc/file_name_2"
_resource_2_length:
dw $-resource_2
...
我可以很容易地組裝這可以用我的C代碼鏈接的ELF對象。但是,我不喜歡使用assembly,因爲這會使我的代碼與平臺相關。
什麼是實現相同結果的更好方法?
這個問題已經被問過計算器,但所提出的解決方案並不適用於我的情況:在C代碼十六進制數組是不是真的C/C++ with GCC: Statically add resource files to executable/library 包括資源:
- 提出了相應的解決辦法因爲它將代碼和數據混合在一個部分中。 (此外,這也不實用,因爲一旦它們轉換爲陣列,我無法預覽資源)
- 在每個資源上都使用
objcopy --add-section
,但每個資源都有它自己的部分(包括頭部和所有這些部分)。這似乎有點浪費,因爲我有大約120個文件(每個+/- 4K)。
「__section」GCC關鍵字可以與提議的包含十六進制數組的解決方案一起使用。通過在構建環境中使「數組」文件依賴於它們的二進制「父母」,您仍然可以預覽文件。 –