cmake: mingw (gcc) 로 MSVC 사용 가능한 dll (.lib) 생성

2304 단어 dlllibVCMinGWcmake
mingw (gcc) 에서 컴파일한 동적 라이브러리 (DLL) 는 기본적으로 MSVC 연결 동적 라이브러리에 필요한lib 파일 (import library) 이 없습니다.
MSVC의 DLL과 LIB의 작용과 차이에 관하여 이 박문을 참고하여 매우 투철하게 설명하십시오 – > <DLL과 LIB의 차이>

그러면 MSVC가 gcc에서 생성한 DLL을 연결하려는데lib 파일(import library)이 없으면 어떻게 합니까?이 문제에 대해 인터넷에서 모두 해결하는 방법이 있다. 이 글은 을 소장할 수 있고 lib를 제공하지 않은 DLL은 이 글에서 제공한 방법으로 시험해 볼 수 있다.
프로젝트의 다른 모듈이 다른 컴파일러로 컴파일되면, gcc가 컴파일한 DLL에 import library (lib 파일) 가 없으면, cmake 설정 옵션을 통해 gcc가 컴파일할 때 import library (lib 파일) 를 생성할 수 있습니다.
CMAKE에 GNUtoMS 매개 변수가 하나 있는데 바로 이 문제를 해결하는 것이다.
GNUtoMS Convert GNU import library (.dll.a) to MS format (.lib). When linking a shared library or executable that exports symbols using GNU tools on Windows (MinGW/MSYS) with Visual Studio installed convert the import library (.dll.a) from GNU to MS format (.lib). Both import libraries will be installed by install(TARGETS) and exported by install(EXPORT) and export() to be linked by applications with either GNU- or MS-compatible tools. CMAKE_GNUtoMS Convert GNU import libraries (.dll.a) to MS format (.lib). This variable is used to initialize the GNUtoMS property on targets when they are created. See that target property for additional information.(이 변수는 GNUtoMS 속성을 초기화하는 데 사용됩니다)

따라서 cmake로Makefile을 생성할 때 설정GNUtoMS을 하면 이 문제를 해결할 수 있습니다.다음과 같은 두 가지 방법이 있습니다.

셸 명령줄 방식


명령줄에서 - D 매개 변수는 BOOL 형식의 CMAKE_GNUtoMS 매개 변수를 ON 로 정의하고, 컴파일할 때 dll에 import library (.lib) 를 생성하도록 지시합니다.
cmake %source_folder% -G “Eclipse CDT4 - MinGW Makefiles” -DCMAKE_GNUtoMS:BOOL=ON

cmak-gui


다음은 cmake-gui 인터페이스에서 CMAKE_GNUtoMS 옵션을 선택하고 <generate> 단추를 누르면Makefile을 생성합니다
그리고 make 컴파일 프로젝트를 실행하는 과정에서 dll을 생성할 때 다음 정보를 출력합니다. (전제는 VC 컴파일러를 설치한 것입니다.) 이것은 VC를 호출하는lib (dll 도구) 에서 import library (.lib) 를 생성한다는 것을 나타냅니다.
Setting environment for using Microsoft Visual Studio 2010 x64 tools. Microsoft (R) Library Manager Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved. 라이브러리 libturbojpeg을 만드는 중입니다.lib과 대상 libturbojpeg.exp

컴파일링이 완료되면 모든 dll에 대응하는lib 파일이 있음을 발견할 수 있습니다.

좋은 웹페이지 즐겨찾기