2012-07-27 8 views
11

Zbudowałem aplikację w Qt Creator, która przetwarza obraz z CImg. Działa dobrze, gdy uruchomię go z wewnątrz IDE, ale jeśli spróbuję uruchomić go z jego katalogu, zgłasza następujący błąd.Wydanie QT Release DLL punktu wejścia procedury

The procedure entry point [email protected]@[email protected]$$QAV0AAZ could not be located 
in the dynamic link library QtCore4.dll 

Wszystko wskazuje na to, że zainstalowano wiele wersji bibliotek DLL. Znalazłem, że moje Xilinx IDE używa bibliotek Qt, ale te biblioteki DLL są tej samej wersji. Naprawdę nie jestem programistą, a tu jest strata.

Odpowiedz

14

Nawet jeśli wersja biblioteki jest taka sama, mogą być niezgodne. Na przykład zostały skompilowane w różnych konfiguracjach, takich jak z obsługą STL lub bez, OpenGL, sterowniki SQL ...

Najprostszym sposobem naprawy powinno być przeniesienie ścieżki Qt SDK na początku zmiennej środowiskowej PATH. W ten sposób, gdy uruchomisz plik wykonywalny, który wymaga bibliotek Qt, załaduje on te dostarczone z SDK (pierwsze znalezione w PATH), chyba że istnieją już kopie QtCore4.dll, QtGui4.dll ... w katalogu wykonywalnym. Z tego powodu, jeśli rozpowszechniasz swoją aplikację, być może będziesz musiał wysłać biblioteki w swoim katalogu.

Inną opcją jest łączenie statyczne, ale wymagane będzie podanie kodu źródłowego na licencji (L) GPL.

+0

W katalogu znajdują się kopie plików QtCore4.dll i QtGui4.dll. To wszystko, czego powinna potrzebować aplikacja. Łączenie statyczne też nie działa. Jestem gotów po prostu rzucić to inżynierowi i powiedzieć mu, żeby poradził sobie z wersją wiersza poleceń. –

+0

@Matt Czy masz na myśli umieszczenie pliku QtCore4.dll w katalogu aplikacji i nadal wyświetlać ten komunikat? Prawdopodobnie jest to niewłaściwa biblioteka DLL. Być może wziąłeś bibliotekę DLL z katalogu QtCreator, ale powinieneś ją pobrać z SDK, ponieważ nie są takie same (a twoja aplikacja jest z nią powiązana). – Claudio

+0

Ran Dependency Walker, i recopied dlls do katalogu. Nie jestem pewien, jakie biblioteki DLL używałem pierwotnie, ale teraz działa. –

-1

Statyczne łączenie bibliotek eliminuje problem.

+6

Ale siły do ​​uwolnienia mocy (L) GPL. – Claudio

0

Użyj opcji DependencyWalker, aby wyświetlić listę, z której załadowany jest plik qtcore4.dll. Miałem ten sam problem - DependencyWalker pokazał mi, że qtcore4.dll został załadowany z c: \ windows \ system32 - ale w tym folderze nie było qtcore4.dll.

Uwaga: w Windows 7 64 Bit c: \ windows \ SysWOW64 jest "zamapowany" jako c: \ windows \ system32. I w tym folderze znalazłem dll - zmieniłem nazwę biblioteki dll i problem został rozwiązany.

Zobacz tę odpowiedź tutaj: Qt fresh Gui application crashes on startup, faulting at QtCore4.dll

Powiązane problemy