> 백엔드 개발 > C++ > 수동으로 정의하지 않고 CMake의 DLL에서 모든 기호를 어떻게 내보낼 수 있습니까?

수동으로 정의하지 않고 CMake의 DLL에서 모든 기호를 어떻게 내보낼 수 있습니까?

Linda Hamilton
풀어 주다: 2024-11-24 16:21:28
원래의
526명이 탐색했습니다.

How Can I Export All Symbols from a DLL in CMake Without Manually Defining Them?

DLL 생성 시 모든 기호를 내보내는 방법

Visual Studio 2005에서는 수동으로 __declspec(dllexport)을 추가하거나 .def 파일을 생성하지 않고 DLL에서 모든 기호를 내보냅니다. 도전을 제시합니다. 다행히도 이제 최신 CMake 버전(cmake-3.3.20150721-g9cd2f-win32-x86.exe 이상)을 사용하여 이 작업을 수행할 수 있습니다.

짧은 답변

모든 기호를 자동으로 내보내려면 DLL인 경우 CMake에서 CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS를 ON으로 설정합니다. 프로젝트:

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
로그인 후 복사

긴 답변

1. __declspec(dllexport)을 사용하여 기호 내보내기

  • 내보낼 클래스 및 메서드에 __declspec(dllexport)를 추가합니다.
  • C를 사용하는 경우 extern "C"를 사용하여 C 함수로 내보내기 C 함수를 내보내는 컴파일러

2. 모듈 정의(.def) 파일 생성

  • .def 파일에 함수 선언을 추가하여 C 함수를 내보냅니다.
  • dumpbin/LINKERMEMBER를 사용하여 정적 라이브러리에서 기호 내보내기 출력을 구문 분석하고 .def 파일을 생성합니다.
  • 다음을 사용하여 .obj 파일에서 기호를 내보냅니다. CMake:

    • CMake 프로젝트에서 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)을 사용하세요.
    • CMake는 사전 링크 중에 .obj 파일에서 기호를 추출하고 .def 파일을 동적으로 생성합니다. event.

CMake 제외:

  • .obj 파일을 수동으로 구문 분석하여 기호를 추출하고 .def를 생성합니다.

참고: CMake 메서드를 사용하여 기호를 내보낼 때는 전체 프로그램 최적화(/GL)를 비활성화합니다.

위 내용은 수동으로 정의하지 않고 CMake의 DLL에서 모든 기호를 어떻게 내보낼 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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