2010-02-19 11 views
9

Mam wspólną bibliotekę (bez zależności QT) [biblioteka B], która łączy się z inną biblioteką współdzieloną (również bez zależności QT) [biblioteka ZA].budowanie z qmake na Linuksie - jak zapobiec qmake z linkowaniem do QtCore i QtGui

Używam Qmake i QT Creator 1.3. Problem polega na tym, że kiedy buduję bibliotekę B i uruchamiam program ldd na pliku wykonywalnym, jest on powiązany z QtCore i QtGui, które pobierają wiele niepotrzebnych plików, co powoduje, że plik wykonywalny długo się ładuje i jest niechciany. zależności.

Próbowałem prawie wszystko, aby zatrzymać qmake od łącząc te biblioteki do biblioteki B.

fragment mojego pliku projektu do biblioteki B przedstawiono poniżej:

TEMPLATE = lib 
LIBS += -L../datelib/bin -ldatelib_release 

QT -= gui core 
LIBS -= -lQtGui -lQtCore 
CONFIG += dll 
CONFIG += debug_and_release 

CONFIG(debug, debug|release) { 
TARGET =targetnameD 
}else { 
TARGET = targetname 
} 

Używam Qt Creator 3 Ubuntu 9.10

QT jest wersja 4.5.2

+0

Której wersji Qt? Próbowałem z 4.6.1 iz Qt - = core gui Makefile stworzony przez qmake nie zawierał bibliotek DLL Qt, usunięcie tej linii zawierało je w Makefile. –

Odpowiedz

3

można spróbować z

CONFIG += dll 
QT  -= gui core 
LIBS -= -lQtGui -lQtCore 
+0

Podkreśliłem twoją odpowiedź w górę, ponieważ conajmniej dałem mi pewność, aby przyjrzeć się bliżej temu, co faktycznie było budowane - i wtedy uświadomiłem sobie, że (w przeciwieństwie do moich innych projektów, które miały domyślnie wydać konfigurację), ten projekt został ustawiony domyślnie - infact nie było żadnej innej konfiguracji pokazanej przez QtCreator, mimo że składnia pliku konfiguracyjnego .pro jest identyczna z innymi projektami. Czy wiesz, co może być przyczyną tego? –

+0

Sprawdź i/lub usuń plik twoja_osoba.pro.user. –

+0

@Mihai: to była pierwsza rzecz, którą zrobiłem (przed opublikowaniem mojego pytania), to nie miało znaczenia. –

0

O ile wiem, twórca Qt nie bierze pod uwagę konfiguracji .pro, jeśli nie ma ich skonfigurowanych oddzielnie od IDE.

Powinieneś przejść do ustawień projektu, sklonować konfigurację debugowania, zmienić nazwę wydania, ustawić konfigurację kompilacji QMake do zwolnienia (!) I zmienić inne ustawienia, według uznania. Następnie możesz wybrać, którą konfigurację zbudować z IDE.

P.S: Spróbuj użyć Qt Creator 1.3.1, ponieważ naprawia on wiele błędów i oferuje ciekawe nowe funkcje.

+0

Hmm, wygląda na to, że był to błąd 1.2.1. Po zainstalowaniu wersji 3 problem zniknął ... Ale tylko dlatego, że wiem na przyszłość, kiedy chcę stworzyć własną konfigurację, czy mógłbyś nakreślić kroki wymagane do "klonowania" istniejącej konfiguracji, aby utworzyć nową? –

+0

Przejdź do Projekty> Ustawienia kompilacji> Dodaj> Klon wybrany. Następnie wybierz nową konfigurację (np. Release) i rozwiń etap kompilacji QMake. Ustaw konfigurację kompilacji QMake do wydania i gotowe. – rpg

10

Umieść CONFIG -= qt w pliku .pro.

+0

To też nie działa:/ –

+1

Działa tutaj. Jest to metoda używana dla projektów w drzewie źródłowym Qt, które nie łączą się z Qt. Generalnie działa. Zobacz 'src/winmain/winmain.pro' w drzewie źródłowym Qt na przykład. Można sprawdzić: (1) naprawdę uruchomiłeś qmake ponownie i przebudowałem wszystko (wykonaj całkowicie czystą kompilację po uruchomieniu qmake). (2) Żadna z bibliotek, z którymi się łączysz, nie łączy się z libQtCore lub libQtGui (np. 'Datelib_release' nie może łączyć się z Qt). – rohanpm

1

Miałem podobny problem. To, co zrobiłem, to stworzyć nowy projekt biblioteki bez qtcore i qtgui. Usunięto wszystkie niepotrzebne pliki utworzone przez kreatora. Dodałem moje pliki do folderu projektu i zmodyfikowałem plik * .pro. Zaczęło działać poprawnie.

To był jakiś problem z QtCreatorem, nie został poprawnie odczytany .pro generuje plik .pro.user, używa QtCreatora do budowania i kreatora generuje poprawny plik .pro.user.

Zrobiłem to z Qt 4.7

Życzenie tej pomocy.

Powiązane problemy