Masalah:
Membenamkan data binari luaran dalam aplikasi C/C yang disusun oleh GCC, khususnya kod shader untuk pengedaran yang lebih cekap sebagai satu boleh laku fail.
Penyelesaian:
GCC menyediakan dua penyelesaian:
ld -r -b binary -o binary.o foo.bar # Then link in binary.o
Arahan ini menukar fail foo.bar ke dalam fail objek (binary.o) yang boleh dipautkan ke dalam atur cara.
Utiliti ini menukar mana-mana fail kepada tatasusunan bait, yang kemudiannya boleh dimasukkan ke dalam program.
Contoh Kemas Kini:
#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; }
Contoh ini menggunakan penyelesaian berasaskan ld untuk membenamkan fail foo.bar ke dalam boleh laku. Ia kemudian mendapatkan semula saiz sumber menggunakan penyelesaian dan membuang kandungan sumber ke konsol.
Atas ialah kandungan terperinci Bagaimana untuk Membenamkan Sumber (cth., Kod Shader) ke dalam Boleh Laksana GCC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!