2009-09-01 25 views
32

Qt Creator'da statik kitaplığın nasıl kullanılacağını açıklayan bir belgeleme bulma zamanı buluyorum.Qt Creator'da statik bir kitaplık kullanarak

Qt Creator kullanarak statik kitaplığımı oluşturdum ve derledim (Yeni => Projects \ C++ Library => "Statik Bağlantılı Kitaplığa" Set). Bir ".a dosyası" derler ve tükürür.

Karşılaştığım sorun kütüphaneyi kullanmaya çalıştığımda. Kullanmak istediğim başka bir projem var (# kütüphanede dosyalar dahil), fakat kütüphaneyle bağlantı kurmanın ya da kütüphaneden dosya eklemenin doğru yolunu bilmiyorum.

cevap

34
LIBS += -L[path to lib] -l[name of lib] 

Not! lib o dosya adı: [nameOfLib] .a ve sahip geçmesine lib sadece orijinal parça -l [nameOfLib]

+1

Yanıtı gönderdikten kısa bir süre sonra http://doc.trolltech.com/4.5/qmake-project-files.html#declaring-other-libraries adresinden cevabı buldum (sadece qmake dokümanlar içinde dolaşmaktan çok yaratıcı şeyler hakkında aptalca şeyler yaptım)). Hala -L veya -l'nin ne anlama geldiğini bilmiyorum, ama makefileların doğası böyle .. komut satırı gobbl-dee-gook kolayca ayrılabilir ... komut satırı gobble-dee-gook. RPG'nin cevabı da önemlidir, includepath şeyler önemlidir. -L/-l'nin de önemli görünmesi nedeniyle sizinkileri doğru yazdım! –

+5

Bu benim için işe yaramadı, ancak burada bir başka cevap, .pro dosyasını düzenlerken ve "Kitaplık Ekle" kullanıcı arabirimini kullanarak sağ tıklattı. – andrewrk

15

Kitaplığı kullanan projenizde, lib'inizin yoluna LIBS değişken noktasını yapın.
Kitaplıktan dosya eklemek için kitaplık klasörünü INCLUDEPATH'a ekleyin ve kod dosyalarınızda düzenli #include yapın.

örn:

# the binary's .pro 
LIBS += c:/mylibs/math.lib 
INCLUDEPATH += c:/mylibs 

Düzenlendi:
-L yolu, -l yolu bir dosya olduğunu söyler kütüphaneleri için arama ancak not alabilir bir dizin olduğunu qmake söyler Aşağıdaki gözlemin. qmake Dokümanlar

:

Bu değişken kütüphanelerin listesini içerir projeye bağlantılı olduğu. Sen Unix -l (kütüphane) ve L (kütüphane yolu) bayraklarını kullanabilirsiniz ve qmake Windows'un (yani bu bağlayıcıya kütüphanenin tam yolunu geçtikten anlamına gelir) bu kitaplıkları ile doğru olanı yapacak . Bunun tek sınırlama qmake hangi dizinde bir -l lib hayatını bulmak için kütüphane, bulunmalıdır olduğunu

Not:. L seçeneği ile Windows'ta belirterek kütüphaneler , yukarıdaki olduğu gibi örnek, kütüphanenin kullanacağı en yüksek sürüm numarası ile sonuçlanmasına neden olacaktır; Örneğin, , libmath2.lib, potansiyel olarak libmathlib yerine kullanılabilir. Bu belirsizliği önlemek için açık bir şekilde 'un .lib dosya adı son ekini de dahil olmak üzere tarafından kullanılacak kitaplığı belirtmenizi öneririz.

+0

Bu yanıtı gönderdiğiniz için teşekkür ederiz. İşte Qt5'in belgelerinden LIBS ve INCLUDEPATH değişkenlerine bağlantılar: [LIBS] (http://doc.qt.io/qt-5/qmake-variable-reference.html#libs) ve [INCLUDEPATH] (http://doc.qt.io/qt-5/qmake-variable-reference.html#includepath). – RAM

11

hepsi de QT proje yaratıcısı

  1. git projectName.Sol taraftaki menüde yanlısı
  2. tip LIBS + =
  3. rightClick AddLibrary
+7

yazarak 'LIBS + =' gerekli değildir. Bunu 2 adımda kısaltabilirsiniz. – andrewrk

+0

Aslında bu, tüm cevaplardan yararlanabileceğim tek çözüm. Andrewrk'in önerdiği gibi, LIBS + = yazmanız gerekmez. İhtiyacınız olan tek şey .pro dosyasına gitmek, sağ tıklamak, Kütüphane Ekle ve QtCreator'ın gerekli kod satırlarını oluşturmasına izin vermektir (BTW, sistemimde [Qt 5.4, Linux], diğerlerinde önerilenlerden oldukça farklı görünüyordu. cevaplar.) – Karpov

3

o

LIBS += -L"/some path" -l"somename.a" 

veya

LIBS += -L/somepath -lsomename.a 

veya

LIBS += -L/somepath -lsomename" 
mi

Bu, olabildiğince kolay olmalı, ancak bir sebepten dolayı arama sonucu çekmek çok zor çünkü çok fazla sayıda insanın yardım istediği forumlar var. aynı klasörde PATH_TO_LIB_DIR hem statik libLIBNAME.a ve dinamik libLIBNAME.so kütüphanelerini varsa

LIBS += -L[PATH_TO_LIB_DIR] -l[LIBNAME] 

çalışmıyor

+1

Cevabınız Dewfy cevabında – Coren

+0

cevabını bulacaksınız. İlk iki çeşit Linux için benim için çalışmaz. – Temak

8

varyantı ... yardımcı olur.
Bu durumda, linkin üzerinde QMake v 3.0 dinamik olanı varsayılan olarak bağlanır.
için numaralı statik bağlantı ile herhangi bir seçenek belirtmeden onu açıkça belirtmeniz gerekir.

LIBS += PATH_TO_LIB_DIR/libLIBNAME.a 
+0

Simliar bir şey fark ettim: Bir "module.dll" ve aynı klasörde 'libmodule.a 'varsa ve dll'yi -L -l ' ile dahil ediyorum, birden çok tanım hatası alıyorum. Ancak, statik lib dosyasını (.a) silersem, o zaman çalışır. Bu bir tesadüf veya beklenen davranış olup olmadığından emin değil ... – user2366975