Как добавить внешнюю библиотеку в проект, созданный Qt Creator RC1 (версия 0.9.2)? Например, для функции win32 EnumProcesses()
требуется добавить Psapi.lib
в проект для сборки.
Добавление внешней библиотеки в проект Qt Creator
Ответ 1
Правильный способ сделать это выглядит следующим образом:
LIBS += -L/path/to -lpsapi
Таким образом, он будет работать на всех платформах, поддерживаемых Qt. Идея состоит в том, что вам нужно отделить каталог от имени библиотеки (без расширения и без префикса lib). Конечно, если вы включаете в себя конкретную версию Windows, это действительно не имеет значения.
Если вы хотите сохранить ваши файлы 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
Вы подразумеваете ошибку из-за отсутствия дополнительного пути include. Попробуйте добавить его с помощью: INCLUDEPATH + = C:\path\to\include\files \ Надеюсь, что это работает. С наилучшими пожеланиями.
Ответ 5
И чтобы добавить несколько файлов библиотеки, вы можете написать, как показано ниже:
INCLUDEPATH * = E:/DebugLibrary/VTK E:/DebugLibrary/VTK/Common E:/DebugLibrary/VTK/Фильтрация E:/DebugLibrary/VTK/GenericFiltering E:/DebugLibrary/VTK/Графика 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/Утилиты E:/DebugLibrary/VTK/VolumeRendering E:/DebugLibrary/VTK/Виджеты E:/DebugLibrary/VTK/Wrapping
LIBS * = -LE:/DebugLibrary/VTKBin/bin/release -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
Ответ 6
Если вы хотите развернуть свое приложение на компьютерах клиентов, а не использовать свое приложение только самостоятельно, мы обнаружим, что метод LIBS+= -Lxxx -lyyy
может привести к путанице, если не проблемы.
Мы разрабатываем приложения для Linux, Mac и Windows с использованием Qt. Мы поставляем полные автономные приложения. Поэтому все несистемные библиотеки должны быть включены в пакет развертывания. Мы хотим, чтобы наши клиенты могли запускать приложение с одного USB-накопителя для всех ОС. По соображениям совместимости платформ USB-флешка должна быть отформатирована как FAT32, которая не поддерживает символические ссылки (Linux).
Мы обнаружили, что idiom LIBS+= -Lxxx -lyyy
слишком много черного ящика:
-
Мы точно не знаем, что такое путь к файлу (статической или динамической), который был найден компоновщиком. Это неудобно. Наш Mac-линкер регулярно обнаруживал библиотеки, отличные от тех, которые, как мы думали, должны использоваться. Это произошло несколько раз с библиотеками OpenSSL, в которых компоновщик Mac нашел и использовал свою собственную - более старую, несовместимую версию OpenSSL, а не нашу запрошенную версию.
-
Мы не можем позволить себе, чтобы компоновщик использовал символические ссылки для библиотек, так как это сломало бы пакет развертывания.
-
Мы хотим видеть из имя библиотеки, привязываем ли мы статическую или динамическую библиотеку.
Итак, для нашего конкретного случая мы используем только абсолютные пути к файлам и проверяем, существуют ли они. Мы удаляем все символические ссылки.
Сначала мы узнаем, какую операционную систему мы используем, и поместим ее в переменную CONFIG. И, например, для Linux 64bit, затем:
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
Я хотел бы добавить для полноты картины, что вы также можете добавить только ПУТЬ БИБЛИОТЕКИ, где он будет искать зависимую библиотеку (которая может не иметь прямой ссылки в вашем коде, но библиотека, которую вы используете, может нуждаться в ней).
Для сравнения, это будет соответствовать тому, что делает среда 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")