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

Bagaimanakah Saya Boleh Membenamkan Sumber ke dalam Boleh Laksana GCC Saya?

Linda Hamilton
Linda Hamiltonasal
2024-12-19 11:41:17884semak imbas

How Can I Embed Resources into My GCC Executable?

Membenamkan Sumber dalam Boleh Laksana dengan GCC

Apabila membangunkan aplikasi C/C dengan GCC, mudah untuk membenamkan data binari luaran terus ke dalam yang boleh dilaksanakan. Ini memudahkan pengedaran dengan menghapuskan keperluan untuk fail sumber yang berasingan.

Keupayaan Pembenaman GCC

GCC menawarkan dua pendekatan utama untuk pembenaman sumber:

  1. Menggunakan ld:

    • Gunakan pilihan ld -r untuk menukar fail luaran kepada fail objek.
    • Pautkan fail objek ini dengan atur cara anda untuk mengakses data binari.
  2. Menggunakan bin2c/bin2h Utiliti:

    • Tukar fail luaran kepada tatasusunan C yang mewakili data binari.
    • Sertakan tatasusunan ini dalam kod anda dan aksesnya seperti yang diperlukan.

Contoh dengan ld

Berikut ialah contoh yang lebih terperinci menggunakan ld:

#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;
}

Dalam contoh ini, fail bernama foo.bar ditukar kepada fail objek (foo.bar.o) menggunakan:

ld -r -b binary -o foo.bar.o foo.bar

Penyambung kemudiannya termasuk foo.bar.o apabila membina boleh laku, membenarkan akses kepada binari data melalui simbol _binary_foo_bar_start dan _binary_foo_bar_end.

Penentuan Saiz

Untuk menentukan saiz sumber terbenam, gunakan:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenamkan Sumber ke dalam Boleh Laksana GCC Saya?. 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