Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membenamkan Sumber (cth., Kod Shader) ke dalam Boleh Laksana GCC?

Bagaimana untuk Membenamkan Sumber (cth., Kod Shader) ke dalam Boleh Laksana GCC?

Patricia Arquette
Patricia Arquetteasal
2024-12-29 11:52:10855semak imbas

How to Embed Resources (e.g., Shader Code) into GCC Executables?

Membenamkan Sumber dalam Boleh Laku Menggunakan GCC

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:

  • Menggunakan Keupayaan ld untuk Menukar Fail kepada Objek:
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.

  • Menggunakan bin2c/bin2h Utiliti:

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)(&amp;_binary_foo_bar_end - &amp;_binary_foo_bar_start);

    printf("Resource size: %u\n", iSize);
    printf("Address of start: %p\n", &amp;_binary_foo_bar_start);
    printf("Address of end: %p\n\n", &amp;_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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn