Linux의 C에서 DSL(동적 공유 라이브러리)을 어떻게 만들고 사용할 수 있습니까?
Linux의 C에서 동적 공유 라이브러리 생성 및 사용
동적 공유 라이브러리(DSL)를 사용하면 여러 프로그램에서 코드를 공유하여 메모리 사용량을 줄일 수 있습니다. 효율성을 향상시킵니다. C에서 DSL을 사용하면 여러 실행 파일에 액세스할 수 있는 재사용 가능한 클래스 라이브러리를 생성할 수 있습니다.
DSL 생성
DSL을 생성하려면 헤더에 클래스 인터페이스와 구현을 정의하세요. 및 소스 파일(예: myclass.h 및 myclass.cc). 클래스에 가상 소멸자와 기호 로딩을 용이하게 하기 위해 extern "C"로 표시된 공용 메서드가 포함되어 있는지 확인하세요.
DSL 사용
별도의 실행 파일에서 DSL을 활용하려면, 다음 단계를 수행하십시오.
- 필요한 라이브러리(
) 포함 및 헤더. - dlopen()을 사용하여 공유 라이브러리를 로드합니다.
- dlsym()을 사용하여 라이브러리의 함수 및 기호에 액세스합니다.
- create_object() 함수를 호출하여 인스턴스화합니다. 라이브러리 클래스의 객체.
- 객체의 객체를 호출합니다. 메소드.
- destroy_object()를 사용하여 객체를 파괴합니다.
예 코드
myclass.h
#include <iostream> class MyClass { public: MyClass(); virtual void DoSomething(); private: int x; };
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; }
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); }
편집 및 실행
Mac OS X의 경우:
- DSL 컴파일: g -dynamiclib -plat_namespace myclass.cc -o myclass.so
- 사용자 실행 파일 컴파일: g class_user.cc -o class_user
Linux:
- DSL 컴파일: g -fPIC -shared myclass.cc -o myclass.so
- 사용자 실행 파일 컴파일: g class_user.cc -ldl -o class_user
MyClass 공유 라이브러리를 사용하려면 class_user를 실행하세요. MyClass 개체를 성공적으로 인스턴스화하고 활용합니다.
위 내용은 Linux의 C에서 DSL(동적 공유 라이브러리)을 어떻게 만들고 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
