> 백엔드 개발 > C++ > Linux의 C에서 DSL(동적 공유 라이브러리)을 어떻게 만들고 사용합니까?

Linux의 C에서 DSL(동적 공유 라이브러리)을 어떻게 만들고 사용합니까?

Patricia Arquette
풀어 주다: 2024-12-04 00:25:12
원래의
994명이 탐색했습니다.

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

Linux에서 C로 동적 공유 라이브러리 생성 및 활용

동적 공유 라이브러리(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿