Jak mogę dodać zewnętrzną bibliotekę do projektu zbudowanego przez Qt Creator RC1 (wersja 0.9.2)? Na przykład funkcja win32 EnumProcesses()
wymaga Psapi.lib
dodania do projektu w celu skompilowania.
c++
winapi
qt
qt-creator
Donotalo
źródło
źródło
qmake -tp vc
, nie znajduję nazw bibliotek wAdditional Dependencies
projekcie, ale projekt vs działa dobrze. Czy to oznacza, że istnieją inne metody dodawaniaAdditional Dependencies
vs?LIBS += -lGdi32
.Czy korzystasz z
qmake
projektów? Jeśli tak, możesz dodać zewnętrzną bibliotekę za pomocąLIBS
zmiennej. Na przykład:źródło
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 ;-)
źródło
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.
źródło
Aby dodać wiele plików bibliotecznych, możesz napisać jak poniżej:
źródło
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:
Wszystkie zależności można skopiować do pakietu wdrożeniowego, ponieważ znamy ich ścieżki plików.
źródło
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:
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.
źródło
w .pro:
LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
w .h / .cpp:
#pragma comment(lib,"user32.lib")
źródło