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.
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; }
Pada Linux:
g++ -fPIC -shared myclass.cc -o myclass.so
Pada Mac OS X:
g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
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
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!