Witam.
Kolejny problem z QT na win8.
Chciałbym zbudować swoją aplikację do samowystarczającego pliku exe z dll'ami w folderze z nim. Na stronie Nokii jest do tego tutorial (http://doc.qt.digia.com/4.7/deployment-windows.html). Jednak mam problem w czasie samej kompilacji (polecenie make sub-src). W terminalu widnieje błąd: undefined reference to __dyn_tls_init_callback.
Próbowałem szukac w internecie, ale zdaje się, że problem rozwiązywała aktualizacja kompilatora. Używam MinGw, jeszcze dzisiaj instalowałem wersję z najnowszymi bibliotekami ściąganymi z repozytorium.
Korzystam z Qt w wersji 4.8.2 (jeszcze od Nokii). Make to GNU Make 3.81.
Wygrał ktoś z takim błędem?
Dzięki z góry za pomoc.
QT != Qt
Jeśli chcesz mieć plik exe z plikami dll to nie potrzebujesz kompilacji statycznej. Kompilacja statyczna polega na tym, że cały kod, ten z bibliotek też jest scalany do jednego pliku exe.
Próbowałeś skorzystać z QtCreator'a?
Generalnie piszę w QtCreatorze. Próbowałem zaciągnąć do roboty eclipse, ale niestety nie udało mi się to. Anyway, jak to zrobić w QtCreatorze?
Według linku do strony digii kompilacja z kilkoma dll'ami jest kompilacją statyczną, więc ktoś mnie wprowadza w błąd :< Niemniej, semantyka nie pomaga mi w tym momencie w żaden sposób.
Taaa... eclipse, NetBeans... może Visual Studio? Najlepiej QtCreator. Pytanie jest co chce osiągnąć wątkotwórca, bo już nie wiem. Chce skompilować swój program statycznie, tak by nie dostarczać exe z dll? Chce skompilować Qt statycznie? Czy może ma problem ze zlinkowanym dynamicznie exe do którego nie potrafi dobrać plików dll by aplikacja ruszyła na innym komputerze?
Problem w tym, żeby uruchomić program z Qt na komputerze, który tego Qt nie ma.
Konkluzja jest taka, że wystarczy dokleić pliki dll. Niestety, w tutorialu podanym wcześniej nikt nie napisał, że wystarczy przekopiować te pliki z SDK, także tutorial jest bez sensu dla nowicjuszy.
Sam problem wynika prawdopodobnie z tego, że Qt 4.8.1 nie jest wspierane na win 8 i stąd błędy. Na maszynie wirtualnej i Win XP kompilacja ruszyła.
Pomijając fakt, że proces jest śmiesznie prosty, to nie wiem dlaczego mój program wymaga bibliotek Xml, Sql, Network, Declaraive, Script i XmlPatterns. To już tak poza konkursem.
Pomijając fakt, że proces jest śmiesznie prosty, to nie wiem dlaczego mój program wymaga bibliotek Xml, Sql, Network, Declaraive, Script i XmlPatterns.
Bo Qt jest strasznie zbloatowane [zabloacone? zabłocone? ;-)].
Wyjścia masz dwa:
- pogodzić się z tym,
- dać se spokój z Qt.
Być może nie będzie musiał się z tym godzić i sobie dawać spokoju z Qt... Spróbuj uruchomić www.jason.o12.pl/program.zip - tam jest statycznie wkompilowane Qt. Jak Ci się uruchomi, to napiszę jak to jest zrobione :)
No właśnie nie do końca. Program powinien ruszyć z 2-ma bibliotekami: QtCore i QtGui, co w poprzedniej wersji programu miało miejsce. Eh, tak to jest, jak elektronik musi programować. :(
raczej trudno wspierać coś co jeszcze nie wyszło oficjalnie, więc to, że masz problemy z Windows 8 to raczej nie jest zaskoczenie. Nie ma gwarancji, że Customer Preview będzie w pełni kompatybilne z oficjalną wersją.
Co do samego qt4, to domyślne dll-k Qt zawierają tonę rożnych rzeczy, których się nie używa, łącznie z grafikami dla różnych wersji systemów (większość aplikacji można uruchomić z odpowiednią opcją i będą wyglądać np jak iOS).
Można użyć narzędzie, które przytnie Qt do twoich potrzeb i znacznie zmniejszy liczbę i masę potrzebnych dll-ek, ale wymaga to rekompilacji Qt. Widziałem, gdzieś graficzne narzędzie do tego, ale teraz nie mogę znaleźć, tu jest z linii poleceń.
To, że twój program wymaga Xml, Sql, Network, Declaraive, Script i XmlPatterns to musi być wynik błędu w pliku projektu (*.pro). Coś za dużo dołączyłeś do zmiennej CONFIG lub do QT.
Może brakuje plików dll od kompilatora? Najlepiej by wątkotwórca potraktował wszystkie skompletowane pliki programem Dependency Walker, by zobaczyć jakich zależności mu jeszcze brakuje. No i jak @MarekR22 napisał - sprawdzić należy zmienne w pliku .pro. @quniq najlepiej będzie jak wkleisz swój .pro.