Odpowiedzi:
Właściwy sposób na zrobienie tego wygląda następująco:
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 przedrostka „lib”). Oczywiście, jeśli dołączasz bibliotekę specyficzną dla systemu Windows, to naprawdę nie ma znaczenia.
Jeśli chcesz przechowywać pliki lib w katalogu projektu, możesz odwołać się do nich za pomocą $$_PRO_FILE_PWD_
zmiennej, np .:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
, nie znajduję nazw bibliotek w Additional Dependencies
projekcie, ale projekt vs działa dobrze. Czy to oznacza, że istnieją inne metody dodawania Additional Dependencies
vs?
LIBS += -lGdi32
.
LIBS + = C: \ Program Files \ OpenCV \ lib
nie zadziała, ponieważ używasz spacji w Program Files. W takim przypadku musisz dodać cudzysłowy, więc wynik będzie wyglądał następująco: LIBS + = "C: \ Program Files \ OpenCV \ lib" . Zalecam umieszczanie bibliotek w lokalizacjach bez białych znaków ;-)
WINDIR = $$DIR
,WINDIR ~=s,/,\\,g
Błąd, który masz na myśli, wynika z braku dodatkowej ścieżki dołączania. Spróbuj dodać go za pomocą: INCLUDEPATH + = C: \ ścieżka \ do \ include \ files \ Mam nadzieję, że zadziała. Pozdrowienia.
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 / zwolnić -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkRenderowanie objętości -lQVTKWidgetPlugin -lvtkGenericFiltering
Jeśli chcesz wdrożyć aplikację na komputerach klientów, zamiast używać aplikacji tylko samodzielnie, okazuje się, że LIBS+= -Lxxx -lyyy
metoda może prowadzić do nieporozumień, jeśli nie problemów.
Tworzymy aplikacje dla systemów Linux, Mac i Windows przy użyciu Qt. Dostarczamy kompletne, samodzielne aplikacje. Dlatego wszystkie biblioteki niesystemowe powinny być uwzględnione w pakiecie wdrożeniowym. Chcemy, aby nasi klienci mogli uruchamiać aplikację z tej samej pamięci USB dla wszystkich systemów operacyjnych. Ze względu na kompatybilność platformy pamięć USB musi zostać sformatowana jako FAT32, który nie obsługuje dowiązań symbolicznych (Linux).
Znaleźliśmy LIBS+= -Lxxx -lyyy
idiom za dużo czarnej skrzynki:
Nie wiemy dokładnie, jaka jest ścieżka do (statycznej lub dynamicznej) biblioteki, która została znaleziona przez linker. To jest niewygodne. Nasz linker dla komputerów Mac regularnie znajdował biblioteki inne niż te, które naszym zdaniem powinny być używane. Zdarzyło się to kilka razy z bibliotekami OpenSSL, w których linker Mac znalazł i użył własnej - starszej, niekompatybilnej - wersji OpenSSL zamiast żądanej wersji.
Nie możemy sobie pozwolić na to, aby konsolidator używał dowiązań symbolicznych do bibliotek, ponieważ spowodowałoby to uszkodzenie pakietu wdrożeniowego.
Chcemy zobaczyć na podstawie nazwy biblioteki, czy łączymy bibliotekę statyczną czy dynamiczną.
Dlatego w naszym konkretnym przypadku używamy tylko bezwzględnych ścieżek plików i sprawdzamy, czy istnieją. Usuwamy wszystkie linki symboliczne.
Najpierw dowiadujemy się, jakiego systemu operacyjnego używamy i umieszczamy to w zmiennej CONFIG. Na przykład dla 64-bitowego systemu Linux:
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 można skopiować do pakietu wdrożeniowego, ponieważ znamy ich ścieżki plików.
Dla kompletności chciałbym dodać, że możesz również dodać tylko ŚCIEŻKĘ BIBLIOTEKI, gdzie będzie szukać zależnej biblioteki (do której może nie odwoływać się bezpośrednio 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.
Sposób, w jaki to obejrzałem, jest następujący:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
Zasadniczo, jeśli nie podasz rzeczywistej nazwy biblioteki, doda ścieżkę do miejsca, w którym będzie przeszukiwać biblioteki zależne. Różnica w składni jest niewielka, ale jest to bardzo przydatne, aby podać tylko ŚCIEŻKĘ, gdzie szukać bibliotek zależnych. Czasami po prostu uciążliwe jest dostarczanie każdej ścieżki indywidualnej biblioteki, w której wiesz, że wszystkie znajdują się w określonym folderze, a Qt Creator je odbierze.
w .pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
w .h / .cpp: #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")