Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Mencipta dan Menggunakan Perpustakaan Dikongsi Dinamik (DSL) dalam C di Linux?

Bagaimanakah Saya Mencipta dan Menggunakan Perpustakaan Dikongsi Dinamik (DSL) dalam C di Linux?

Patricia Arquette
Patricia Arquetteasal
2024-12-04 00:25:12932semak imbas

How Do I Create and Use Dynamic Shared Libraries (DSLs) in C   on Linux?

Mencipta dan Menggunakan Pustaka Dikongsi Dinamik dalam C pada Linux

Pustaka kongsi dinamik (DSL) menawarkan mekanisme yang berkuasa untuk penggunaan semula kod dan modulariti dalam C . Ia membenarkan berbilang atur cara untuk berkongsi satu salinan kod perpustakaan, mengurangkan penggunaan memori dan meningkatkan prestasi.

Mencipta Pustaka Dikongsi Dinamik

Untuk mencipta DSL, anda perlu mentakrifkan kelas dan fungsi dalam fail pengepala dan fail pelaksanaan, masing-masing. Dalam fail pengepala, isytiharkan kelas anda dengan fungsi maya untuk mengelakkan pautan statik. Dalam fail pelaksanaan, tentukan fungsi dan sediakan fungsi pembungkus untuk mencipta dan memusnahkan objek.

// myclass.h
class MyClass {
public:
  virtual void DoSomething();

private:
  int x;
};

// myclass.cc
extern "C" MyClass* create_object() { return new MyClass; }
extern "C" void destroy_object(MyClass* object) { delete object; }

Menyusun dan Memaut

Pada Linux:

g++ -fPIC -shared myclass.cc -o myclass.so

Pada Mac OS X:

g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so

Menggunakan Pustaka Dikongsi

Dalam boleh laku yang berasingan, muatkan DSL menggunakan dlopen() dan dapatkan penuding kepada fungsi create_object() dan destroy_object(). Cipta contoh kelas menggunakan create_object(), gunakan kaedah kelas, dan akhirnya panggil destroy_object() untuk mengagihkan memori.

// class_user.cc
int main() {
  void* handle = dlopen("myclass.so", RTLD_LAZY);
  MyClass* (*create)();
  void (*destroy)(MyClass*);
  create = (MyClass* (*)())dlsym(handle, "create_object");
  destroy = (void (*)(MyClass*))dlsym(handle, "destroy_object");

  MyClass* myClass = (MyClass*)create();
  myClass->DoSomething();
  destroy(myClass);
}

Menyusun dan Memaut:

Pada Linux:

g++ class_user.cc -ldl -o class_user

Pada Mac OS X:

g++ class_user.cc -o class_user

Kod Contoh

Contoh yang disediakan mempamerkan cara mencipta pustaka kelas kongsi, memuatkannya dalam boleh laku yang berasingan dan menggunakan fungsi kelas. Konsep utama melibatkan penentuan kelas dan fungsi, mencipta fungsi pembungkus untuk penciptaan dan pemusnahan objek, memuatkan perpustakaan dan memanggil kaedah kelas.

Atas ialah kandungan terperinci Bagaimanakah Saya Mencipta dan Menggunakan Perpustakaan Dikongsi Dinamik (DSL) dalam C di Linux?. 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