Der Linker verwendet keine Standard-Laufzeitbibliothek, wenn nur Bibliotheken miteinander verbunden werden (keine Objekte).
Ich möchte, dass die Benutzer meine Qt-using-Anwendung erneut mit ihrem eigenen Build von Qt verknüpfen können, ohne alle Quellen neu erstellen zu müssen. Dies kann beispielsweise zur Einhaltung der LGPL verwendet werden. Dazu muss ich Objektdateien für alle meine Quellen bereitstellen. Um es mit qmake einfacher zu machen, habe ich das Projekt intern unterteilt in:
A statisches Bibliotheksprojekt das enthält Objekte für alle Quelldateien, einschließlich der Datei, die hatint main(int, char**)
.
EinAnwendungsprojekt das verbindet die statische Bibliothek oben mit Qt. Qt kann entweder eine statische Bibliothek oder eine dynamische sein. Es gibt keine Quelldateien für dieses Projekt.
Ich verteile dann die statische Bibliothek (.lib) und dieAnwendungsprojektdatei Damit kann jeder die Anwendung mit seiner eigenen Version von Qt neu verknüpfen, je nachdem, welche Methode er bevorzugt (entweder statisch verknüpftes Qt oder dynamisch verknüpftes Qt), sofern er über die erforderliche Version von MSVC verfügt.
Ich mache den Build unter MSVC 2008 (Qt 4) und 2012 (Qt 5). Die Makefiles werden von qmake generiert.
Das Problem ist, dass die Verknüpfung beim Erstellen der fehlschlägtAnwendungsprojekt.
LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
Sobald ich eine Dummy-Quelldatei hinzufügedummy.cpp
zumAnwendungsprojektist die Verknüpfung erfolgreich. Gibt es eine Möglichkeit, diese Problemumgehung zu vermeiden?
//dummy.cpp (this is the entire source)
int dummy;