답변:
이를 수행하는 적절한 방법은 다음과 같습니다.
LIBS += -L/path/to -lpsapi
이렇게하면 Qt가 지원하는 모든 플랫폼에서 작동합니다. 아이디어는 라이브러리 이름에서 디렉토리를 분리해야한다는 것입니다 (확장자없이 'lib'접두사없이). 물론 Windows 특정 lib를 포함하는 경우 이것은 실제로 중요하지 않습니다.
프로젝트 디렉토리에 lib 파일을 저장하려면 $$_PRO_FILE_PWD_
변수를 사용하여 참조 할 수 있습니다 . 예 :
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
에서 libs 이름을 찾지 Additional Dependencies
못하지만 vs 프로젝트는 잘 실행됩니다. 추가 할 다른 방법이 있다는 뜻 Additional Dependencies
인가요?
LIBS += -lGdi32
있습니다..
LIBS + = C : \ Program Files \ OpenCV \ lib
Program Files에서 공백을 사용하고 있기 때문에 작동하지 않습니다. 이 경우 따옴표를 추가해야하므로 결과는 다음과 같습니다. LIBS + = "C : \ Program Files \ OpenCV \ lib" . 공백이 아닌 위치에 라이브러리를 배치하는 것이 좋습니다 ;-)
WINDIR = $$DIR
,WINDIR ~=s,/,\\,g
의미하는 오류는 추가 포함 경로가 누락 되었기 때문입니다. 다음과 같이 추가해보세요. INCLUDEPATH + = C : \ path \ to \ include \ files \ 작동하기를 바랍니다. 문안 인사.
여러 라이브러리 파일을 추가하려면 다음과 같이 작성할 수 있습니다.
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 -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvextkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkzlib -lvtkjpeg -lvtkzlib -lvtkjpeg -lvtkzlib -lvtkjpeg -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
응용 프로그램을 직접 사용하는 대신 고객의 컴퓨터에 응용 프로그램을 배포하려는 경우 LIBS+= -Lxxx -lyyy
경우 문제가 아니라면 방법이 혼란을 초래할 수 있습니다.
우리는 Qt를 사용하여 Linux, Mac 및 Windows 용 애플리케이션을 개발합니다. 완전한 독립형 애플리케이션을 제공합니다. 따라서 모든 비 시스템 라이브러리는 배포 패키지에 포함되어야합니다. 우리는 고객이 모든 OS에 대해 동일한 USB 스틱에서 애플리케이션을 실행할 수 있기를 바랍니다. 플랫폼 호환성을 위해 USB 스틱은 (Linux) 심볼릭 링크를 지원하지 않는 FAT32로 포맷해야합니다.
우리 LIBS+= -Lxxx -lyyy
는 블랙 박스 의 관용구를 너무 많이 발견했습니다 .
링커에서 찾은 (정적 또는 동적) 라이브러리의 파일 경로가 무엇인지 정확히 알 수 없습니다. 이것은 불편합니다. 우리의 Mac 링커는 우리가 사용해야한다고 생각했던 것과 다른 libs를 정기적으로 발견했습니다. 이는 Mac 링커가 요청한 버전이 아닌 이전 버전의 호환되지 않는 OpenSSL 버전을 찾아 사용한 OpenSSL 라이브러리에서 여러 번 발생했습니다.
링커가 라이브러리에 대한 심볼릭 링크를 사용하면 배포 패키지가 손상 될 수 있으므로 감당할 수 없습니다.
라이브러리 이름 에서 정적 또는 동적 라이브러리를 연결하는지 확인하려고합니다 .
따라서 우리의 특별한 경우에는 절대 파일 경로 만 사용하고 이들이 존재하는지 확인합니다. 모든 심볼릭 링크를 제거합니다.
먼저 우리가 사용하는 운영 체제를 찾아서 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
}
모든 종속성은 파일 경로를 알고 있으므로 배포 패키지에 복사 할 수 있습니다.
완전성을 위해 종속 라이브러리를 찾을 위치에 LIBRARY PATH 만 추가 할 수도 있습니다 (코드에서 직접 참조되지 않을 수 있지만 사용하는 라이브러리에 필요할 수 있음).
비교를 위해 이것은 LIBPATH 환경이 수행하는 작업에 해당하지만 Qt Creator에서는 모호하고 잘 문서화되지 않았습니다.
이 문제를 해결 한 방법은 다음과 같습니다.
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
기본적으로 실제 라이브러리 이름을 제공하지 않으면 종속 라이브러리를 검색 할 경로를 추가합니다. 구문의 차이는 작지만 종속 라이브러리를 찾을 PATH 만 제공하는 데 매우 유용합니다. 때로는 특정 폴더에있는 각 경로 개별 라이브러리를 제공하는 것이 고통스럽고 Qt Creator가이를 선택합니다.
.pro에서 : LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
.h / .cpp에서 : #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")