VS2010 und QT 4.8.0 scheitert
-
Hallo an alle,
ich möchte mich in QT ein wenig einarbeiten aber es scheitert schon bei dem Start. Meine Programmierkenntnise halten sich in grenzen. In kann zwar die Sprache (C++) aber mit VS und Co. scheitert es oft. Wie gesagt möchte ich Vs2010 und QT 4.8.0 verwenden. Warum VS? -> Ich arbeite in meinem Studium(elktrotechnik) damit. Möchte erstmal mit etwas bekanntes arbeiten!
Ich möchte ein kleines Programm schreiben welches eine Benutzeroberfläche(QT) hat und mit meinem Homeserver HTTP Request schickt. Für den HTTP Request nutze ich WINHTTP. Seht ihr da ein Problem? Werde aber bald auch hier QT nutzen!
So nach dem ich VS 2010 + ServicePack installiert hatte, habe ich QT geladen und mit folgendem Konsollenbefehl in der VS Konsole ausgeführt
configure -debug-and-release -opensource -platform win32-msvc2010
danach normal mit nmake erzeugt.So nun bemängelt VS aber folgendes
@1>qtgui4.lib(QtGui4.dll) : fatal error LNK1112: Modul-Computertyp "x64" steht in Konflikt mit dem Zielcomputertyp "X86".@
Heißt das nun das ich eine 64Bit Version von Qt erzeugt habe? Wenn ich die Projekteinstellung auf 64Bit geändert habe kann ich es kompilieren und linken. In der VS kann ich es prima starten aber die Exe wirft dann folgenden Fehler " die Anwendung konnte nicht korrekt gestartet werden 0xc000007b"So nun habe ich für QT nochmal einen Build ausgeführt und zwar mit der x86 Konsole für VS und siehe da es geht auf Anhieb. Werde jetzt noch testen ob die exe auch geht.
Kann es wirklich am der Konsolen Version liegen? Konnte das ganze noch einen anderen Fehler haben?
LG
MOE
EDIT:
So nun geht selbst die EXE ... Könnte mir trotzdem jemand meinen Fehler erklären bzw. einen Ansatz liefern. Danke -
Willkommen bei diesem Forum
Ich kenne mich nicht mit MSVC 2010 aus, da ich nur MSVC 2005 verwende.
Deine Vermutung scheint aus meiner Sicht schon richtig zu sein. Bibliotheken sind compiler, compilerversions und zielplattformabhängig. Die verschiedenen MSVC-version lassen sich nicht mischen. Und auch eine Kompilierung für 64 bit sollte (kann) man nicht mit einer 32 bit mischen. Gerade eine 64 bit-Kompilierung für eine 32 bit Plattform/Applikation muss wohl mehr als nur ein paar Probleme haben. Umgekehrt könnte es vielleicht schon funktionieren. Also 32 bit Applikation sollte ja auf 64 bit laufen. Eventuell kann man eine 32 bit-Lib in eine 64 bit-Applikation einbinden. Verlassen würde ich mich auf letztes nicht.
Da ich kein MSVC 2010 kenne ich auch die Konsolen nicht. Meine Vermutung wäre, dass bei der x86-Konsole schon alle Settings so sind, dass alle auf 32 bit zu geschnitten wird.
-
32bit-Anwendungen laufen i.d.R. problemlos auf einem 64bit-System. Umgedreht geht das nicht.
Um die Sache zu vereinfachen, würde ich erstmal auf 32 bit zurückgehen, d.h. auch Qt als 32-bit Version verwenden (gibt's fertig compiliert), damit laufen die Anwendungen dann von Haus aus schonmal überall. Ich schliesse mich koahnigs Vermutung an, dass es wohl zwei VS2010-Konsolen gibt, jeweils für 32 und 64 bit konfiguriert. Mangels VS2010-Installation bei mir kann ich's aber auch nicht nachprüfen.
Bezüglich HTTP:
Da jetzt nochmal eine externe Bibliothek (aus Sicht von Qt ist sie das ja) zu verwenden verkompliziert die Angelegenheit nochmals zusätzlich. Die Qt Network-Klassen sind ziemlich einfach zu verwenden, ich würde das von vornherein in Betracht ziehen. In den Online-Dokus zu [[Doc:QNetworkAccessManager]] ist ein Beispiel, wie man das verwendet. -
[quote author="Volker" date="1326666385"]Um die Sache zu vereinfachen, würde ich erstmal auf 32 bit zurückgehen, d.h. auch Qt als 32-bit Version verwenden (gibt's fertig compiliert), damit laufen die Anwendungen dann von Haus aus schonmal überall. Ich schliesse mich koahnigs Vermutung an, dass es wohl zwei VS2010-Konsolen gibt, jeweils für 32 und 64 bit konfiguriert. Mangels VS2010-Installation bei mir kann ich's aber auch nicht nachprüfen.[/quote]
Das hat VS 2008 auch schon. VS 2008 kann 64 bit cross compilieren unter 32 bit. Deswegen braucht es mehrere Console Einstellungen, damit die richtigen tools genommen werden.