Linker nie używa domyślnej biblioteki środowiska wykonawczego podczas łączenia tylko bibliotek (bez obiektów)
Chcę, aby użytkownicy mogli ponownie połączyć moją aplikację używającą Qt z własną kompilacją Qt, bez konieczności przebudowywania wszystkich źródeł. Może to zostać wykorzystane na przykład w celu zapewnienia zgodności z LGPL. Aby to zrobić, muszę dostarczyć pliki obiektów dla wszystkich moich źródeł. Aby ułatwić, używając qmake, podzieliłem projekt wewnętrznie na:
A statyczny projekt biblioteki który zawiera obiekty dla wszystkich plików źródłowych, w tym plik, który maint main(int, char**)
.
Naprojekt aplikacyjny który łączy powyższą bibliotekę statyczną z Qt. Qt może być biblioteką statyczną lub dynamiczną. Brak plików źródłowych dla tego projektu.
Następnie dystrybuuję statyczną bibliotekę (.lib) i bibliotekęplik projektu aplikacji aby każdy mógł ponownie połączyć aplikację z własną wersją Qt, niezależnie od tego, jaką preferują wersję (albo statycznie połączony Qt, albo dynamicznie połączony Qt), o ile mają niezbędną wersję MSVC.
Robię kompilację w obu MSVC 2008 (Qt 4) i 2012 (Qt 5). Pliki makefile są generowane przez qmake.
Problem polega na tym, że linkowanie kończy się niepowodzeniem podczas budowaniaprojekt aplikacyjny.
LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
Jak tylko dodam fałszywy plik źródłowydummy.cpp
doprojekt aplikacyjny, linkowanie powiedzie się. Czy można uniknąć tego obejścia?
//dummy.cpp (this is the entire source)
int dummy;