問題:
在由以下程式碼編譯的 C/C應用程式中嵌入外部二進位資料GCC,特別是著色器程式碼,可作為單一執行檔更有效地分發
解決方案:
GCC 提供了兩種解:
ld -r -b binary -o binary.o foo.bar # Then link in binary.o
此指令將檔案 foo.bar 轉換為可以連結到程式中的物件檔案(binary.o)。
這些公用程式將任何檔案轉換為位元組數組,然後可以將其包含在程式中。
更新的範例:
#include <stdio.h> extern char _binary_foo_bar_start[]; extern char _binary_foo_bar_end[]; int main(void) { // Get the resource size (workaround) unsigned int iSize = (unsigned int)(&_binary_foo_bar_end - &_binary_foo_bar_start); printf("Resource size: %u\n", iSize); printf("Address of start: %p\n", &_binary_foo_bar_start); printf("Address of end: %p\n\n", &_binary_foo_bar_end); // Dump resource contents for (char* p = _binary_foo_bar_start; p != _binary_foo_bar_end; ++p) { putchar( *p); } return 0; }
此範例使用基於 ld 的解決方案將檔案 foo.bar 嵌入到執行檔中。然後,它使用解決方法檢索資源大小,並將資源內容轉儲到控制台。
以上是如何將資源(例如著色器程式碼)嵌入到 GCC 可執行檔中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!