> 백엔드 개발 > C++ > 본문

CMake를 사용하여 Visual Studio에서 DLL을 생성할 때 모든 기호를 자동으로 내보내려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-11-24 03:58:09
원래의
558명이 탐색했습니다.

How Can I Automatically Export All Symbols When Creating a DLL in Visual Studio Using CMake?

DLL 생성 시 자동으로 기호 내보내기

소개

Visual Studio 2005에서 DLL을 생성할 때 개별 기호를 수동으로 내보내거나 모듈 정의(.def) 파일을 사용합니다. 이 문서에서는 지루한 선언 없이 모든 기호를 자동으로 내보내는 솔루션을 제공합니다.

해결책: CMake 기능

최신 CMake 버전(>= 3.3.20150721-g9cd2f)은 다음을 가능하게 하는 기능을 제공합니다. 자동 기호 내보내기. CMakeLists.txt 파일에 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)을 추가하면 컴파일러는 수동으로 주석을 추가할 필요 없이 모든 기호를 내보냅니다.

장점 및 제한 사항

장점:

  • 크게 기호 내보내기를 단순화하여 __declspec(dllexport) 또는 수동 .def 파일 생성이 필요하지 않습니다.

제한 사항:

  • 이전 CMake에서는 사용할 수 없습니다.
  • 전체 프로그램 최적화(/GL)는 자동 기호와 호환되지 않습니다.

자세한 설명

CMake는 다음 접근 방식을 사용합니다.

  1. 컴파일하는 동안 내보내기에 대한 정보가 포함된 "objects.txt" 파일을 생성합니다. DLL에 사용되는 .obj 파일입니다.
  2. .obj 파일을 구문 분석하여 기호를 추출합니다.
  3. 이 정보를 기반으로 내보낸 기호가 포함된 .def 파일을 생성합니다.
  4. 그런 다음 DLL은 .def 파일과 연결되어 기호를 자동으로 내보냅니다.

사용 예

이 기능을 사용하려면 다음 CMakeLists.txt를 사용하여 CMake 프로젝트를 생성하세요. 파일:

cmake_minimum_required(VERSION 2.6)
project(myproject)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

set(SOURCE_EXE main.cpp)

include_directories(...)

add_executable(main ${SOURCE_EXE})

target_link_libraries(main ...)
로그인 후 복사

프로젝트를 컴파일하면 모든 기호가 자동으로 내보내진 상태로 DLL이 생성됩니다.

대체 접근 방식

기호를 내보내는 다른 방법이 있습니다. as:

  • 수동 내보내기: 함수 및 클래스 선언에 __declspec(dllexport) 추가.
  • 정적 라이브러리 및 Dumpbin 사용: 정적 라이브러리에서 기호를 덤프하고 .def 파일을 생성하여 내보내기.
  • 타사 도구 사용: lib 또는 ldd를 사용하여 기호를 내보냅니다.

그러나 이러한 접근 방식은 CMake 솔루션에 비해 시간이 더 많이 걸리거나 제한이 있을 수 있습니다.

위 내용은 CMake를 사용하여 Visual Studio에서 DLL을 생성할 때 모든 기호를 자동으로 내보내려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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