동적 공유 라이브러리(DSL)는 C에서 코드 재사용 및 모듈화를 위한 강력한 메커니즘을 제공합니다. 이를 통해 여러 프로그램이 라이브러리 코드의 단일 복사본을 공유하여 메모리 사용량을 줄이고 성능을 향상시킬 수 있습니다.
DSL을 생성하려면 다음을 정의해야 합니다. 헤더 파일과 구현 파일의 클래스와 함수. 헤더 파일에서 정적 연결을 방지하기 위해 가상 함수로 클래스를 선언합니다. 구현 파일에서 객체 생성 및 삭제를 위한 함수를 정의하고 래퍼 함수를 제공합니다.
// 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; }
Linux의 경우:
g++ -fPIC -shared myclass.cc -o myclass.so
Mac OS의 경우 X:
g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
별도의 실행 파일에서 dlopen()을 사용하여 DSL을 로드하고 create_object() 및 destroy_object() 함수에 대한 포인터를 검색합니다. create_object()를 사용하여 클래스 인스턴스를 생성하고 클래스 메서드를 사용한 다음 마지막으로 destroy_object()를 호출하여 메모리 할당을 해제합니다.
// 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); }
컴파일 및 링크:
켜기 Linux:
g++ class_user.cc -ldl -o class_user
Mac OS X:
g++ class_user.cc -o class_user
제공된 예는 공유 클래스 라이브러리를 별도의 실행 파일에 로드하고 클래스 기능을 활용하세요. 주요 개념은 클래스와 함수 정의, 객체 생성 및 소멸을 위한 래퍼 함수 생성, 라이브러리 로딩, 클래스 메소드 호출로 구성됩니다.
위 내용은 Linux의 C에서 DSL(동적 공유 라이브러리)을 어떻게 만들고 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!