2016-04-08 21 views
1

Böyle derlenmiş QT statik bir sürümünü vardır:Statik QT'ye bağlantı, doğru bağlantı sırasını nasıl öğreneceksiniz?

@echo off 

SET QTDIR=%~dp0% 
SET QMAKESPEC=win32-g++ 
SET PATH=%PATH%;%QTDIR%/gcc 

call configure -release -nomake examples -nomake tools -static -static-runtime -opensource -confirm-license -platform win32-g++ -ltcg -c++std c++11 -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -fontconfig -qt-harfbuzz -qt-sql-sqlite -prefix %QTDIR%/gcc 

mingw32-make -j4 
mingw32-make install 

Ve şuna benzer bir örnek program var: Böyle cmake ile derlemeye çalıştığınızda Şimdi

#include <QtWidgets/QApplication> 
#include <QtWidgets/QMainWindow> 
#include <QtCore/QtPlugin> 
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin); 

int main(int argc, char** argv){ 

    QApplication app(argc, argv); 
    QMainWindow w; 

    w.resize(600,600); 
    w.show(); 
    app.exec(); 

    return 0; 
} 

:

ADD_EXECUTABLE(${PROJECT_NAME} WIN32 "main.cpp") 
TARGET_LINK_LIBRARIES(${PROJECT_NAME} Qt5Widgets qwindows Qt5Gui Qt5Core qtmain Qt5Gui Qt5OpenGL Qt5OpenGLExtensions Qt5PlatformSupport qtfreetype dxguid d3d9 d3dx9 imm32 winmm Qt5WinExtras libEGL ws2_32 translator qtpcre libGLESv2 qtharfbuzzng preprocessor) 

Çalışıyor! Ama satırın ilk ucunda yinelenen Qt5Gui dikkat edin? Eğer bir tane çıkarsam ve derlersek, tanımlanmamış referans bağlantı hataları TONS ile bitti.

Doğru siparişi nasıl anlarım? Teşekkürler!

+0

Eski günlerde, bazı alet zincirleri ile herşeyi birbirine bağlamanın basit bir hilesi iki kez çalıştı. "TARGET_LINK_LIBRARIES" yönergesini iki kez tekrarlamaya çalışın. Son zamanlarda denemedim, hala çalıştığından emin olamazsınız (ve "cmake" ile çalışır). – Dummy00001

cevap

1

Çoğunlukla deneme yanılma ile ... Teorik olarak nm (ikinci sütunda 'U' veya 'u' olan tüm semboller) ile bir kütüphaneden dış referanslar çıkartabilirsiniz. Diğer kütüphanelerde semboller ve bağlantı sırasındaki ilk kütüphanenin arkasına yerleştirin. Ama bu değerinden daha çok iş. Tanımlanmamış referanslar, ihtiyacınız olan kütüphaneye ilişkin iyi bir ipucu vermelidir.

Çift Qt5Gui muhtemelen kütüphaneler arasında döngüsel referanslar olduğundan (yani libA'nın libB'den bir işlevi olması gerektiğinden ve libB'nin libA'dan bir işlevden kaynaklandığı) muhtemeldir. İki kez eklemenin bir zararı yok; linker sadece gerçekten ihtiyaç duyduğu fonksiyonları içerecek kadar akıllıdır.