개발/C++

Qt Creator 프로젝트에 외부 라이브러리 추가

MinorMan 2020. 9. 24. 00:40
반응형

<질문>

Qt Creator RC1 (버전 0.9.2)에서 빌드 한 프로젝트에 외부 라이브러리를 추가하려면 어떻게해야합니까? 예를 들어 win32 함수 EnumProcesses ()는 빌드 할 프로젝트에 Psapi.lib를 추가해야합니다.


<답변1>

이를 수행하는 적절한 방법은 다음과 같습니다.

LIBS += -L/path/to -lpsapi

이렇게하면 Qt가 지원하는 모든 플랫폼에서 작동합니다. 아이디어는 라이브러리 이름에서 디렉토리를 분리해야한다는 것입니다 (확장자없이 'lib'접두사없이). 물론 Windows 특정 lib를 포함하는 경우 이것은 실제로 중요하지 않습니다.

프로젝트 디렉토리에 lib 파일을 저장하려는 경우 $$ _ PRO_FILE_PWD_ 변수로 참조 할 수 있습니다. 예 :

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi

<답변2>

qmake 프로젝트를 사용하고 있습니까? 그렇다면 LIBS 변수를 사용하여 외부 라이브러리를 추가 할 수 있습니다. 예 :

win32:LIBS += path/to/Psapi.lib

<답변3>

LIBS + = C : \ Program Files \ OpenCV \ lib

Program Files에서 공백을 사용하고 있기 때문에 작동하지 않습니다. 이 경우 따옴표를 추가해야하므로 결과는 다음과 같습니다. LIBS + = "C : \ Program Files \ OpenCV \ lib". 공백이 아닌 위치에 라이브러리를 배치하는 것이 좋습니다 ;-)


<답변4>

의미하는 오류는 추가 포함 경로가 누락 되었기 때문입니다. 다음과 같이 추가해보십시오. INCLUDEPATH + = C : \ path \ to \ include \ files \ 작동하기를 바랍니다. 문안 인사.


<답변5>

여러 라이브러리 파일을 추가하려면 다음과 같이 작성할 수 있습니다.

INCLUDEPATH * = E : / DebugLibrary / VTK E : / DebugLibrary / VTK / Common E : / DebugLibrary / VTK / Filtering E : / DebugLibrary / VTK / GenericFiltering E : / DebugLibrary / VTK / Graphics E : / DebugLibrary / VTK / GUISupport / Qt E : / DebugLibrary / VTK / Hybrid E : / DebugLibrary / VTK / Imaging E : / DebugLibrary / VTK / IO E : / DebugLibrary / VTK / Parallel E : / DebugLibrary / VTK / Rendering E : / DebugLibrary / VTK / Utilities E : / DebugLibrary / VTK / VolumeRendering E : / DebugLibrary / VTK / Widgets E : / DebugLibrary / VTK / Wrapping LIBS * = -LE : / DebugLibrary / VTKBin / bin / release -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering


<답변6>

응용 프로그램을 직접 사용하지 않고 고객의 컴퓨터에 배포하려는 경우 LIBS + = -Lxxx -lyyy 메서드가 문제가 아닌 경우 혼란을 초래할 수 있습니다.

우리는 Qt를 사용하여 Linux, Mac 및 Windows 용 애플리케이션을 개발합니다. 완전한 독립형 애플리케이션을 제공합니다. 따라서 모든 비 시스템 라이브러리는 배포 패키지에 포함되어야합니다. 우리는 고객이 모든 OS에 대해 동일한 USB 스틱에서 애플리케이션을 실행할 수 있기를 바랍니다. 플랫폼 호환성을 위해 USB 스틱은 (Linux) 심볼릭 링크를 지원하지 않는 FAT32로 포맷해야합니다.

LIBS + = -Lxxx -lyyy 관용구가 너무 많은 블랙 박스를 발견했습니다.

따라서 우리의 특별한 경우에는 절대 파일 경로 만 사용하고 이들이 존재하는지 확인합니다. 모든 심볼릭 링크를 제거합니다.

먼저 우리가 사용하는 운영 체제를 찾아서 CONFIG 변수에 넣습니다. 예를 들어 Linux 64 비트의 경우 :

linux64 {
    LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
    !exists($$LIBSSL): error ("Not existing $$LIBSSL")
    LIBS+= $$LIBSSL
    LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
    !exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
    LIBS+= $$LIBCRYPTO
}

모든 종속성은 파일 경로를 알고 있으므로 배포 패키지에 복사 할 수 있습니다.


<답변7>

완전성을 위해 종속 라이브러리를 찾을 위치에 LIBRARY PATH 만 추가 할 수도 있습니다 (코드에서 직접 참조되지 않을 수 있지만 사용하는 라이브러리에 필요할 수 있음).

비교를 위해 이것은 LIBPATH 환경이 수행하는 작업에 해당하지만 Qt Creator에서는 모호하고 잘 문서화되지 않았습니다.

이 문제를 해결 한 방법은 다음과 같습니다.

LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"

기본적으로 실제 라이브러리 이름을 제공하지 않으면 종속 라이브러리를 검색 할 경로를 추가합니다. 구문의 차이는 작지만 종속 라이브러리를 찾을 PATH 만 제공하는 데 매우 유용합니다. 때로는 특정 폴더에있는 각 경로 개별 라이브러리를 제공하는 것이 고통스럽고 Qt Creator가이를 선택합니다.


<답변8>

.pro에서 : LIBS + = Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

.h / .cpp : #pragma comment (lib, "user32.lib")

#pragma comment(lib,"psapi.lib")
반응형