Qt Creator projesine harici kitaplık ekleme


112

Qt Creator RC1 (sürüm 0.9.2) tarafından oluşturulan bir projeye harici kitaplığı nasıl ekleyebilirim? Örneğin, win32 işlevinin inşa edilecek projeye eklenmesi EnumProcesses()gerekir Psapi.lib.

Yanıtlar:


216

Bunu yapmanın doğru yolu şudur:

LIBS += -L/path/to -lpsapi

Bu şekilde Qt tarafından desteklenen tüm platformlarda çalışacaktır. Buradaki fikir, dizini kitaplık adından ayırmanız gerektiğidir (uzantı ve 'lib' öneki olmadan). Elbette, Windows'a özgü bir kitaplık ekliyorsanız, bu gerçekten önemli değil.

Kitaplık dosyalarınızı proje dizininde saklamak istemeniz durumunda, bunlara bir $$_PRO_FILE_PWD_değişkenle başvurabilirsiniz , örneğin:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi

2
Bir ortam değişkenini kitaplık yolu olarak belirtmek mümkün mü? Soruyorum çünkü .pro dosyasına sabit kodlanmış yol adları yazmak, bir proje tüm kitaplıkları aynı konumlarda kurulu olmayan birden fazla kişi tarafından geliştirilirse işleri bozacaktır.
antred

Bu benim için işe yaradı, ancak ile bir vs projesi oluşturduğumda qmake -tp vc, projede kitap adı bulamıyorum Additional Dependencies, ancak vs projesi iyi çalışıyor. Bu Additional Dependencies, vs eklemek için başka yöntemler olduğu anlamına mı geliyor ?
Summer Paz

1
Yerleşik bir Windows kitaplığı için bir yol belirlemeniz gerektiğini düşünmüyorum. Bizim .pro dosyalar win32 bölümünde bu gibi satırlar vardır: LIBS += -lGdi32.
Dan Korn

1
@DanKorn'un belirttiği gibi, yerleşik Windows kitaplıkları için bir yol belirtmeniz gerekmez (ve belirtmemelisiniz).
bur

Neden bir kütüphane eklemek için bir GUI yapamıyorlar smh.
GeneCode

24

qmakeProje kullanıyor musunuz ? Öyleyse, LIBSdeğişkeni kullanarak harici bir kitaplık ekleyebilirsiniz . Örneğin:

win32:LIBS += path/to/Psapi.lib

1
Eksik soru için üzgünüm, ancak psapi kitaplığı önceden oluşturulmuş mu yoksa QtCreator onu oluşturmakla ilgilenecek mi?
Dfr

11

LIBS + = C: \ Program Dosyaları \ OpenCV \ lib

Program Dosyaları'nda beyaz boşluklar kullandığınız için çalışmaz. Bu durumda tırnak işaretleri eklemeniz gerekir, böylece sonuç şöyle görünecektir: LIBS + = "C: \ Program Files \ OpenCV \ lib" . Kitaplıkları beyaz boşluk olmayan yerlere yerleştirmenizi tavsiye ederim ;-)


Qt'nin (Oluşturan) en yeni sürümleri, dizin ayırıcı olarak her zaman (tek) eğik çizgi ister. Bunun tek istisnası, Windows altında "sistem" komutunu kullanmanızdır. Daha sonra sisteme kaçan bir geriye doğru eğik çizgi, yani iki ters eğik çizgi beslemeniz gerekir. Aşağıdaki gibi yapılabilir iki geriye eğik çizgi ile tüm sağa doğru eğik çizgiler değiştirmek için: WINDIR = $$DIR,WINDIR ~=s,/,\\,g
adlag

6

Demek istediğiniz hata ek içerme yolunun eksik olmasından kaynaklanmaktadır. Şununla eklemeyi deneyin: INCLUDEPATH + = C: \ path \ to \ include \ files \ Umarım çalışır. Saygılarımızla.


4

Birden fazla kitaplık dosyası eklemek için aşağıdaki gibi yazabilirsiniz:

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 / serbest -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering


3

Uygulamanızı yalnızca kendiniz kullanmak yerine müşterilerin makinelerine dağıtmak istiyorsanız, LIBS+= -Lxxx -lyyy yöntemin sorun değilse bile kafa karışıklığına yol açabileceğini .

Qt kullanarak Linux, Mac ve Windows için uygulamalar geliştiriyoruz. Eksiksiz, bağımsız uygulamalar gönderiyoruz. Bu nedenle, tüm sistem dışı kitaplıklar dağıtım paketine dahil edilmelidir. Müşterilerimizin uygulamayı tüm işletim sistemleri için aynı USB çubuğundan çalıştırabilmesini istiyoruz. Platform uyumluluğu nedeniyle USB bellek, (Linux) sembolik bağlantılarını desteklemeyen FAT32 olarak biçimlendirilmelidir.

LIBS+= -Lxxx -lyyyDeyimi çok fazla kara kutu bulduk :

  1. Bağlayıcı tarafından bulunan (statik veya dinamik) kitaplığın dosya yolunun tam olarak ne olduğunu bilmiyoruz. Bu sakıncalıdır. Mac bağlayıcımız düzenli olarak, kullanılması gerektiğini düşündüklerimizden farklı libler buldu. Bu, Mac bağlayıcısının istediğimiz sürüm yerine kendi - eski, uyumsuz - OpenSSL sürümünü bulduğu ve kullandığı OpenSSL kitaplıklarında birkaç kez oldu.

  2. Bağlayıcının kitaplıklara sembolik bağlar kullanmasını göze alamayız çünkü bu dağıtım paketini bozabilir.

  3. Bir statik kitaplığı mı yoksa dinamik bir kitaplığı mı bağladığımızı kitaplığın adından görmek istiyoruz .

Bu nedenle, bizim özel durumumuz için yalnızca mutlak dosya yolları kullanıyoruz ve var olup olmadıklarını kontrol ediyoruz. Tüm sembolik bağlantıları kaldırıyoruz.

Önce hangi işletim sistemini kullandığımızı bulup bunu CONFIG değişkenine koyuyoruz. Ve örneğin Linux 64bit için, o zaman:

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
}

Dosya yollarını bildiğimiz için tüm bağımlılıklar dağıtım paketine kopyalanabilir.


1

Eksiksizlik adına, bağımlı bir kitaplığı arayacağı yalnızca KÜTÜPHANE YOLUNU da ekleyebileceğinizi eklemek isterim (kodunuzda doğrudan başvurulmayabilir, ancak kullandığınız bir kitaplık buna ihtiyaç duyabilir).

Karşılaştırma için, bu, LIBPATH ortamının yaptıklarına karşılık gelir, ancak Qt Creator'da bir tür belirsizdir ve iyi belgelenmemiştir.

Bunu halletme şeklim şudur:

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

Esasen, gerçek kitaplık adını sağlamazsanız, bağımlı kitaplıkları arayacağı yolu ekler. Sözdizimindeki fark küçüktür, ancak bu, bağımlı kitaplıkların aranacağı PATH'yi sağlamak için çok kullanışlıdır. Bazen, her bir yolun belirli bir klasörde olduğunu bildiğiniz ve Qt Creator'ın bunları alacağı tek bir kitaplık sağlamak sadece bir acıdır.


0

Profesyonel olarak : LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

.h / .cpp biçiminde: #pragma comment(lib,"user32.lib")

#pragma comment(lib,"psapi.lib")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.