>백엔드 개발 >C++ >Linux에서 동적 공유 C 클래스 라이브러리를 어떻게 만들고 사용할 수 있습니까?

Linux에서 동적 공유 C 클래스 라이브러리를 어떻게 만들고 사용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-05 05:12:09599검색

How Can I Create and Use Dynamic Shared C   Class Libraries on Linux?

Linux의 동적 공유 C 클래스 라이브러리

소개
C에서 공유 클래스 라이브러리 생성 및 활용 Linux는 어려운 작업이 될 수 있습니다. 이 문서에서는 객체 생성, 수정, 삭제를 포함하여 공유 C 클래스 라이브러리를 만들고 사용하는 과정을 다루는 포괄적인 가이드를 제공합니다.

공유 C 클래스 라이브러리 만들기
공유 C 클래스 라이브러리를 생성하려면 다음 단계를 따르세요.

  1. 클래스 인터페이스 정의: 헤더 생성 멤버 변수와 메소드를 포함하여 클래스 인터페이스를 선언하는 파일(.h)
  2. 클래스 메소드 구현: 클래스 메소드를 구현하는 소스 파일(.cc)을 생성합니다.
  3. 라이브러리 함수 내보내기: 라이브러리를 생성하고 삭제하는 데 사용할 함수를 내보내려면 "extern 'C'"를 사용하세요. object.
  4. 라이브러리 컴파일: 적절한 플래그(Linux에서는 -shared, macOS에서는 -dynamiclib)를 사용하여 헤더 및 소스 파일을 공유 라이브러리로 컴파일합니다.

공유 C 클래스 라이브러리 사용
생성된 공유 C 클래스 라이브러리를 사용하려면 다음을 따르세요. 다음 단계:

  1. 라이브러리 로드: dlopen()을 사용하여 공유 라이브러리를 메모리에 로드합니다.
  2. 함수 기호 해석: 내보낸 함수의 주소를 확인하려면 dlsym()을 사용하세요.
  3. 생성 및 사용 라이브러리 객체: dlsym()에서 검색된 함수 포인터를 사용하여 라이브러리 클래스의 객체를 생성하고 해당 메서드를 호출합니다.
  4. 라이브러리 객체 삭제: 완료되면 소멸 함수를 사용합니다. 라이브러리 개체를 적절하게 삭제하기 위한 포인터.

예 구현
다음 코드 조각은 간단한 공유 C 라이브러리(myclass.h, myclass.cc)와 이를 활용하는 C 프로그램(class_user.cc)을 보여줍니다. 라이브러리:

myclass.h:

class MyClass {
public:
  MyClass();
  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; }
MyClass::MyClass() { x = 20; }
void MyClass::DoSomething() { cout << x << endl; }

class_user.cc:

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++ -fPIC -shared myclass.cc -o myclass.so
g++ class_user.cc -ldl -o class_user

이러한 단계를 따르면 Linux에서 동적 공유 C 클래스 라이브러리를 성공적으로 생성하고 사용할 수 있습니다.

위 내용은 Linux에서 동적 공유 C 클래스 라이브러리를 어떻게 만들고 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.