cmake: mingw (gcc) 로 MSVC 사용 가능한 dll (.lib) 생성
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 파일이 있음을 발견할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LoadLibrary에서 126 오류가 발생하면 원인이되는 파일 이름을 찾는 방법Loadlibrary에서 DLL을 동적으로 로드할 때 로드 실패입니다. 실패한 파일 이름은 알려주지 않습니다. 로드하고자 하는 DLL 자체를 로드할 수 없다면 이야기는 간단하지만, 대상 DLL이 다른 DLL을 로드하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.