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

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

Mary-Kate Olsen
Lepaskan: 2024-12-05 20:24:12
asal
501 orang telah melayarinya

How Can 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) membenarkan berbilang atur cara berkongsi kod, mengurangkan penggunaan memori dan meningkatkan kecekapan. Dalam C , DSL membolehkan penciptaan perpustakaan kelas boleh guna semula yang boleh diakses oleh berbilang boleh laku.

Mencipta DSL

Untuk mencipta DSL, tentukan antara muka kelas dan pelaksanaan dalam pengepala dan fail sumber (cth., myclass.h dan myclass.cc). Pastikan kelas termasuk pemusnah maya dan kaedah awam yang ditandakan di luar "C" untuk memudahkan pemuatan simbol.

Menggunakan DSL

Untuk menggunakan DSL dalam boleh laku yang berasingan, lakukan langkah berikut:

  1. Sertakan perpustakaan yang diperlukan () dan pengepala.
  2. Gunakan dlopen() untuk memuatkan perpustakaan kongsi.
  3. Akses fungsi dan simbol perpustakaan menggunakan dlsym().
  4. Panggil fungsi create_object() untuk membuat instantiate objek daripada perpustakaan kelas.
  5. Panggil kaedah objek.
  6. Hancurkan objek menggunakan destroy_object().

Contoh Kod

myclass.h

#include <iostream>

class MyClass {
public:
  MyClass();
  virtual void DoSomething();
private:
  int x;
};
Salin selepas log masuk

myclass.cc

#include "myclass.h"

extern "C" MyClass* create_object() {
  return new MyClass;
}

extern "C" void destroy_object(MyClass* object) {
  delete object;
}

MyClass::MyClass() {
  x = 20;
}

void MyClass::DoSomething() {
  std::cout << x << std::endl;
}
Salin selepas log masuk

class_user .cc

#include <dlfcn.h>
#include <iostream>
#include "myclass.h"

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 = create();
  myClass->DoSomething();
  destroy(myClass);
}
Salin selepas log masuk

Kompilasi dan Pelaksanaan

Pada Mac OS X:

  • Kompilasi DSL: g -dynamiclib -flat_namespace myclass.cc -o myclass.so
  • Kompilasi pengguna boleh laku: g class_user.cc -o class_user

Di Linux:

  • Kompilasi DSL: g -fPIC -shared myclass.cc -o myclass.so
  • Kompilkan pengguna boleh laku: g class_user.cc -ldl -o class_user

Laksanakan class_user untuk menggunakan pustaka kongsi MyClass. Ia akan membuat instantiate dan menggunakan objek MyClass dengan jayanya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh 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 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