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
Lepaskan: 2024-12-04 00:25:12
asal
931 orang telah melayarinya

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; }
Salin selepas log masuk

Menyusun dan Memaut

Pada Linux:

g++ -fPIC -shared myclass.cc -o myclass.so
Salin selepas log masuk

Pada Mac OS X:

g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
Salin selepas log masuk

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);
}
Salin selepas log masuk

Menyusun dan Memaut:

Pada Linux:

g++ class_user.cc -ldl -o class_user
Salin selepas log masuk

Pada Mac OS X:

g++ class_user.cc -o class_user
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan