Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membenamkan Sumber ke dalam Boleh Laku Saya Menggunakan GCC?

Bagaimanakah Saya Boleh Membenamkan Sumber ke dalam Boleh Laku Saya Menggunakan GCC?

Susan Sarandon
Susan Sarandonasal
2024-12-14 15:07:11752semak imbas

How Can I Embed Resources into My Executable Using GCC?

Membenamkan Sumber dalam Boleh Laku Menggunakan GCC: Panduan Terperinci

Aplikasi C/C terbenam selalunya memerlukan kemasukan data binari luaran, seperti kod shader, fon atau imej. Ini boleh memberikan cabaran apabila mengedarkan aplikasi sebagai boleh laku tunggal. GCC menyediakan penyelesaian untuk memudahkan proses ini.

Pilihan 1: Menggunakan Penjanaan Fail Objek ld

Satu kaedah ialah memanfaatkan keupayaan ld untuk menukar mana-mana fail kepada fail objek. Ini membolehkan anda memasukkan data binari ke dalam aplikasi anda sebagai objek semasa peringkat pemautan. Untuk melakukan ini, gunakan arahan berikut:

ld -r -b binary -o binary.o foo.bar  # then link in binary.o

Pilihan 2: Menggunakan Utiliti bin2c/bin2h

Pilihan lain ialah menggunakan utiliti bin2c/bin2h untuk menukar fail luaran ke dalam tatasusunan bait. Tatasusunan ini kemudiannya boleh dimasukkan ke dalam kod anda sebagai pemalar, membolehkan anda mengakses data binari seperti yang diperlukan.

Contoh: Membenamkan Data Menggunakan ld -r -b Binary

Pertimbangkan contoh berikut, di mana kami mempunyai fail bernama foo.bar yang mengandungi beberapa teks:

foo.bar: This is an example text.

Untuk membenamkan teks ini dalam program C kami, kami boleh menggunakan kod berikut:

#include <stdio.h>

extern char _binary_foo_bar_start[];
extern char _binary_foo_bar_end[];

int main(void)
{
    printf( "address of start: %p\n", &_binary_foo_bar_start);
    printf( "address of end: %p\n", &_binary_foo_bar_end);

    for (char* p = _binary_foo_bar_start; p != _binary_foo_bar_end; ++p) {
        putchar( *p);
    }

    return 0;
}

Mendapatkan Saiz Sumber

Untuk mendapatkan saiz sumber terbenam, anda boleh menggunakan kod berikut:

unsigned int iSize =  (unsigned int)(&_binary_foo_bar_end - &_binary_foo_bar_start)

Kesimpulan

GCC menyediakan pelbagai kaedah untuk membenamkan data binari luaran ke dalam boleh laku C/C. Teknik ini memudahkan pengedaran aplikasi ringkas dan serba lengkap yang menggabungkan fail sumber dalam boleh laku itu sendiri.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenamkan Sumber ke dalam Boleh Laku Saya Menggunakan 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