Dodawanie zewnętrznej biblioteki do projektu Qt Creator

Jak mogę dodać bibliotekę zewnętrzną do projektu zbudowanego przez Qt Creator RC1 (wersja 0.9.2)? Na przykład funkcja win32 EnumProcesses() wymaga dodania Psapi.lib do projektu do zbudowania.

Author: sashoalm, 2009-04-05

7 answers

Właściwy sposób to zrobić jest tak:

LIBS += -L/path/to -lpsapi

W ten sposób będzie działać na wszystkich platformach obsługiwanych przez Qt. Chodzi o to, że musisz oddzielić Katalog od nazwy biblioteki (bez rozszerzenia i bez prefiksu 'lib'). Oczywiście, jeśli uwzględniasz lib specyficzny dla systemu Windows, To naprawdę nie ma to znaczenia.

Jeśli chcesz przechowywać pliki lib w katalogu projektu, możesz odwołać się do nich za pomocą zmiennej $$_PRO_FILE_PWD_, np.:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
 202
Author: Tamás Szelei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-12 08:32:19

Czy korzystasz z qmake projektów? Jeśli tak, możesz dodać bibliotekę zewnętrzną za pomocą LIBS zmienna. Np.:

win32:LIBS += path/to/Psapi.lib
 22
Author: dirkgently,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 17:23:41

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

Nie zadziała, ponieważ używasz białych spacji w plikach programu. W tym przypadku musisz dodać cudzysłów, więc wynik będzie wyglądał tak: LIBS + = "C:\Program Files\OpenCV \ lib" . Polecam umieszczanie bibliotek w innych miejscach; -)

 11
Author: martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-19 11:11:31

Błąd, który masz na myśli, jest spowodowany brakiem dodatkowej ścieżki dołączania. Spróbuj dodać go z: INCLUDEPATH += C:\path\to\include\files\ Mam nadzieję, że zadziała. Pozdrawiam.

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-21 16:27:45

I aby dodać wiele plików bibliotecznych, możesz napisać jak poniżej:

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-lvtkpng-lvtktiff-lvtkzlib-lvtkjpeg-lvtkexpat-lvtkNetCDF-lvtkexoIIc-lvtkftgl-lvtkfreetype-lvtkHybrid-lvtkVolumeRendering-lqvtkwidgetplugin-lvtkgenericfiltering

 4
Author: QT-ITK-VTK-Help,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-26 10:30:13

Jeśli chcesz wdrożyć aplikację na maszynach klientów, a nie używać aplikacji tylko samodzielnie, okaże się, że metoda LIBS+= -Lxxx -lyyy może prowadzić do nieporozumień, jeśli nie problemów.

Tworzymy aplikacje dla Linuksa, Mac i Windows przy użyciu Qt. Wysyłamy kompletne, autonomiczne aplikacje. Tak więc wszystkie biblioteki nie-systemowe powinny być zawarte w pakiecie wdrażania. Chcemy, aby nasi klienci mogli uruchamiać aplikację z tej samej pamięci USB dla wszystkich systemów operacyjnych. Ze względu na platformę kompatybilność pamięć USB musi być sformatowana jako FAT32, który nie obsługuje dowiązań symbolicznych (Linux).

Znaleźliśmy idiomLIBS+= -Lxxx -lyyy za dużo czarnej skrzynki:

  1. Nie wiemy dokładnie, co to jest ścieżka pliku (statycznej lub dynamicznej) biblioteki, która została znaleziona przez łącznik. To niewygodne. Nasz Mac linker regularnie odnajdywał biblioteki różniące się od tych, które uważaliśmy za przydatne. Zdarzyło się to kilka razy w przypadku bibliotek OpenSSL, gdzie Linker Mac znalazł i używała własnej-starszej, niezgodnej - wersji OpenSSL, a nie żądanej przez nas wersji.

  2. Nie możemy sobie pozwolić, aby linker używał dowiązań symbolicznych do bibliotek, ponieważ mogłoby to spowodować złamanie pakietu wdrożeniowego.

  3. Chcemy sprawdzić z nazwę biblioteki czy łączymy bibliotekę statyczną czy dynamiczną.

Więc w naszym konkretnym przypadku używamy tylko bezwzględnych ścieżek plików i sprawdzamy, czy one istnieją. Usuwamy wszystkie dowiązania symboliczne.

Najpierw znajdujemy out jaki system operacyjny używamy i umieścić to w zmiennej CONFIG. I, na przykład dla Linuksa 64bit, wtedy:

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
}

Wszystkie zależności mogą być skopiowane do pakietu wdrożeniowego, tak jak znamy ich ścieżki plików.

 2
Author: adlag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-25 21:00:41

Chciałbym dodać ze względu na kompletność, że możesz również dodać tylko ścieżkę biblioteczną, w której będzie ona szukać zależnej biblioteki (która może nie być bezpośrednio odwołana w Twoim kodzie, ale biblioteka, której używasz, może jej potrzebować).

Dla porównania, odpowiadałoby To temu, co robi środowisko LIBPATH, ale jego rodzaj jest niejasny w Qt Creator i nie jest dobrze udokumentowany.

The way I came around this is following:

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

Zasadniczo, jeśli nie dostarczysz rzeczywistej biblioteki nazwa, dodaje ścieżkę do miejsca, w którym będzie wyszukiwać zależne biblioteki. Różnica w składni jest niewielka, ale jest to bardzo przydatne, aby podać tylko ścieżkę, gdzie szukać zależnych bibliotek. Czasami jest to tylko ból, aby dostarczyć każdą ścieżkę indywidualną bibliotekę, w której wiesz, że wszystkie są w określonym folderze, a Qt Creator je odbierze.

 1
Author: zar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 15:23:41