Include Problem

Alles rund um die Programmierung mit Qt
Antworten
BlackArma
Beiträge: 9
Registriert: 5. Januar 2014 21:07

Include Problem

Beitrag von BlackArma »

Moin moin,

nachdem ich es endlich geschaft habe MSCV2012 richtig in Qt-Creator einzubinden und ich es den anschein hatte das ich endlich builden kann bekomme ich den nächsten error um die Ohren geknallt:

Code: Alles auswählen

C:\Programming\Qt\5.2.0\msvc2012\include\QtCore\qglobal.h:46: Fehler: C1083: Cannot open include file: 'stddef.h': No such file or directory
Ich habe auch schon alle Pfade die MinGW verwendet zusätlich mit eingebunden, hilft auch nichts :(
Durch auskommentieren habe ich herrausgefunden das er 3 Sachen nicht includen kann:
- stddef.h
- algorithm
- new

So sieht im Moment meine PATH Variable für MSVC2012 32 Bit aus:

Code: Alles auswählen

C:\Program Files (x86)\HTML Help Workshop;
C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0\;
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\;
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools;
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
C:\Program Files\TortoiseSVN\bin;
C:\Programming\MicrosoftVisualStudio11.0\Common7\IDE\;
C:\Programming\MicrosoftVisualStudio11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;
C:\Programming\MicrosoftVisualStudio11.0\Common7\Tools;
C:\Programming\MicrosoftVisualStudio11.0\Team Tools\Performance Tools;
C:\Programming\MicrosoftVisualStudio11.0\VC\BIN;
C:\Programming\MicrosoftVisualStudio11.0\VC\VCPackages;
C:\Programming\MicrosoftVisualStudio11.0\VC\include;
C:\Programming\Qt\5.2.0\msvc2012_64\bin;
C:\Programming\WindowsKits\8.0\Windows Performance Toolkit\;
C:\Programming\WindowsKits\8.0\bin\x86;
C:\Windows;
C:\Windows\Microsoft.NET\Framework\v3.5;
C:\Windows\Microsoft.NET\Framework\v4.0.30319;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Windows\system32;
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Include Problem

Beitrag von Christian81 »

Dann darfst Du diese includes eben nicht verwenden - MSVC und C/C++ Standards sind nicht gerade Freunde... wobei der algorithm - Header eigentlich in msvc vorhanden sein sollte - zumindest bei mir.
Was das mit dem PATH zu tun haben soll ist mir allerdings schleierhaft.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BlackArma
Beiträge: 9
Registriert: 5. Januar 2014 21:07

Re: Include Problem

Beitrag von BlackArma »

Das Ding ist ja das es Qt braucht, einmal <stddef.h> und <algorithm> in qglobal.h und <new> in qmutex.h
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Include Problem

Beitrag von brax »

Dann ist der MSVC2012 wohl doch noch nicht richtig im Qt-Creator eingebunden, die drei Header gibt es alle (befinden sich im VC/include Verzeichnis der VS Installation).
Was genau da schief läuft, kann ich Dir nicht sagen, aber offensichtlich stimmen die Include Verzeichnisse nicht. Seltsam ist, dass ich beim Qt-Creator einfach nur unter "Projects->Build Settings->Tool Chain" die von mir gewünschte VS Tool Chain (also z.B. VC++ 11 x86) auswählen muss und alles andere automatisch vom Qt-Creator gemacht wird. Der bekommt sogar mit, wenn ich eine neue Version vom VS installiere. Mal ganz davon abgesehen, dass ich den Qt-Creator nur in Ausnahmefällen benutze und eigentlich mit dem VS2013 arbeite.

Warum genau möchtest Du unbedingt den Qt-Creator benutzen und nicht direkt im Visual Studio arbeiten? Nur aus Neugier...
BlackArma
Beiträge: 9
Registriert: 5. Januar 2014 21:07

Re: Include Problem

Beitrag von BlackArma »

brax hat geschrieben:Dann ist der MSVC2012 wohl doch noch nicht richtig im Qt-Creator eingebunden, die drei Header gibt es alle (befinden sich im VC/include Verzeichnis der VS Installation). Was genau da schief läuft, kann ich Dir nicht sagen, aber offensichtlich stimmen die Include Verzeichnisse nicht
Das sie sich dort befinden ist mir bekannt, den Pafd habe ich auch in PATH eingebunden...
brax hat geschrieben:Seltsam ist, dass ich beim Qt-Creator einfach nur unter "Projects->Build Settings->Tool Chain" die von mir gewünschte VS Tool Chain (also z.B. VC++ 11 x86) auswählen muss und alles andere automatisch vom Qt-Creator gemacht wird. Der bekommt sogar mit, wenn ich eine neue Version vom VS installiere.
Das bekommt Qt-Creator bei mir auch mit und er erkennt es auch von selber wie bei dir, aber wenn ich jetzt die PATH Umgebungsvarible nicht für MSVC2012 abänder kann ich nicht builden weil er "cl" nicht kennt und die jom.exe mir einen Fehler um die Ohren haut.
Korrektur: Den Debugger kann er anscheinend nicht finden aber das sollte eigentlich nichts mit meinem include Problem zu tun haben, oder?!?
brax hat geschrieben:Warum genau möchtest Du unbedingt den Qt-Creator benutzen und nicht direkt im Visual Studio arbeiten? Nur aus Neugier...
Ich bin ein totaler Qt Neuling, ich wusste nicht mal das es dafür ein Plugin/Addin gibt und wollte mich deshalb erst mal die ich nenne es mal "native" IDE welche mitgeliefert wird verwenden. Jetzt schau ich mir mal das Plugin/Addin an...
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Include Problem

Beitrag von RHBaum »

Nur meine Meinung:

Die VS IDE (kommerzielle, nicht die free version) ist eine der besten C++ IDE's die's gibt
Wenn Due eh schon auf M$ festgenagelt bist, dann nimm doch wenigstens die positive Seite auch mit ! :lol:
Ich arbeite zum beispiels beruflich mit der VS IDE und komm mit dem QT Creator gar ned klar ....
Die Qt integration in VS ist auch nicht schlecht.

Wenn DU plattformunabhaengig arbeiten musst, meidest dann eh die VS IDE komplett.

Im Fortgeschrittenen Stadium bietet sich dann auch nen Buildgenerator an .... Qt liefert da schon einen (qmake)
Wenn du schon ne .pro hasst, kannst du dir daraus nen Visual Studio Project (sln + vcproj) generieren lassen und damit die Sourcen bearbeiten.
Dazu QMAKESPEC setzen (QMAKESPEC=win32-msvc2012 oder so ... )
qmake -tp vc aufrufen ....
dann hasst nen VS Project, das kannst dierekt im VS öffnen :-)
Wenn VS die includes auch ned findet, dann hasst bei der VS-installation nen Problem ... ^^

Kann es sein das DU die Free variante hasst ? Glaub da waren einige dinge ned mit bei, was bei der standard kommerziellen version eh mitinstalliert wird ...

Ciao ...
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Include Problem

Beitrag von brax »

Ich stimme RHBaum voll zu.

Auch mit der freien VS Version (Express) kann man problemlos mit Qt arbeiten, wenn man qmake auf der Konsole benutzt. Man kann das Plugin nicht installieren, aber darauf kann man m.M. nach eh verzichten (ich hab es auch in der Pro Version nicht installiert, weil zumindest die alte Version - also die für Qt4 - bei großen Projekten immer mal wieder der Debugger ins Verderben gezogen hat). Damit der Debugger einem die Werte von Qt Typen halbwegs vernünftig anzeigt kann man auch in der Express Version eine eigene natvis Datei benutzen, die das erlaubt.

Meine Qt4.natvis (wie der Name schon sagt für Qt 4) sieht z.B. so aus:

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
 
  <Type Name="QString">
	<DisplayString>{d->data,su}</DisplayString>
	<StringView>d->data,su</StringView> 
  </Type>
 
  <Type Name="QByteArray">
	<DisplayString>{d->data,s}</DisplayString>
  </Type>
  
  <Type Name="QList<*>">
    <AlternativeType Name="QQueue<*>" />
	<DisplayString>{{size = {d->end - d->begin}}}</DisplayString>
	<Expand>
	<Item Name="[size]">d->end - d->begin</Item>
	<Synthetic Name="Type">
	 <DisplayString>{"$T1"}</DisplayString>
	</Synthetic>
	<IndexListItems>
		<Size>d->end - d->begin</Size>
		<ValueNode>($T1*)((d->array + d->begin)[$i])</ValueNode>
	</IndexListItems>
	</Expand>
  </Type>
  
 <Type Name="QList<*>::iterator">
    <AlternativeType Name="QList<*>::const_iterator" />
	<AlternativeType Name="QQueue<*>::const_iterator" />
	<AlternativeType Name="QQueue<*>::iterator" />
	<DisplayString>{{current value = {*(reinterpret_cast<$T1*>(i))}}}</DisplayString>
  </Type>
  <Type Name="QListIterator<*>">
    <AlternativeType Name="QMutableListIterator<*>" />
	<DisplayString>{{next value = {*(reinterpret_cast<$T1*>(i.i))}}}</DisplayString>
  </Type>
  
 <Type Name="QVector<*>">
	<AlternativeType Name="QStack<*>" />
	<DisplayString>{{size = {d->size}}}</DisplayString>
	<Expand>
	<Item Name="[size]">d->size</Item>
	<Item Name="[capacity]">d->alloc</Item>
	<Synthetic Name="Type">
	 <DisplayString>{"$T1"}</DisplayString>
	</Synthetic>
	<IndexListItems>
		<Size>d->size</Size>
		<ValueNode>(p->array[$i])</ValueNode>
	</IndexListItems>
	</Expand>
  </Type>

  
<Type Name="QHashNode<*,*>">
	<DisplayString Condition="next->next == 0">{{ key={key} value={value} h={h}}}</DisplayString>
	<DisplayString>{{ key={key} value={value} h={h} withCollision }}</DisplayString>
	<Expand>
		<Item Name="NextNode">reinterpret_cast<QHashNode<$T1,$T2> *>(next)</Item>
	</Expand>
</Type>

<Type Name="QHash<*,*>">
    <DisplayString>{{ size={d->size} buckets={d->numBuckets} }}</DisplayString>
    <Expand>
		<Synthetic Name="Key Type">
		 <DisplayString>{"$T1"}</DisplayString>
		</Synthetic>
		<Synthetic Name="Value Type">
		 <DisplayString>{"$T2"}</DisplayString>
		</Synthetic>
        <IndexListItems>
            <Size>d->numBuckets</Size>
			<ValueNode Condition="reinterpret_cast<QHashNode<$T1,$T2> *>(d->buckets[$i]) != e">reinterpret_cast<QHashNode<$T1,$T2> *>(d->buckets[$i])</ValueNode>
        </IndexListItems>
    </Expand>
</Type>
<Type Name="QHash<*,*>::iterator">
    <AlternativeType Name="QHash<*,*>::const_iterator" />
	<DisplayString>{{current value = {(reinterpret_cast<QHashNode<$T1,$T2>*>(i)->key)} : {(reinterpret_cast<QHashNode<$T1,$T2>*>(i)->value)}}}</DisplayString>
	<Expand>
		<Item Name="Current Key">reinterpret_cast<QHashNode<$T1,$T2>*>(i)->key</Item>
		<Item Name="Current Value">reinterpret_cast<QHashNode<$T1,$T2>*>(i)->value</Item>
	</Expand>
  </Type>
  <Type Name="QHashIterator<*,*>">
    <AlternativeType Name="QMutableHashIterator<*,*>" />
	<DisplayString>{{next value = {(reinterpret_cast<QHashNode<$T1,$T2>*>(i.i)->key)} : {(reinterpret_cast<QHashNode<$T1,$T2>*>(i.i)->value)}}}</DisplayString>
	<Expand>
		<Item Name="Next Key">reinterpret_cast<QHashNode<$T1,$T2>*>(i.i)->key</Item>
		<Item Name="Next Value">reinterpret_cast<QHashNode<$T1,$T2>*>(i.i)->value</Item>
	</Expand>
  </Type>

<Type Name="QSet<*>">
    <DisplayString>{{ size={q_hash.d->size} buckets={q_hash.d->numBuckets} }}</DisplayString>
    <Expand>
		<Synthetic Name="Type">
		 <DisplayString>{"$T1"}</DisplayString>
		</Synthetic>

        <IndexListItems>
            <Size>q_hash.d->numBuckets</Size>
			<ValueNode Condition="reinterpret_cast<QHashNode<$T1,QHashDummyValue> *>(q_hash.d->buckets[$i]) != q_hash.e">reinterpret_cast<QHashNode<$T1,QHashDummyValue> *>(q_hash.d->buckets[$i])</ValueNode>
			
        </IndexListItems>
    </Expand>
</Type>
<Type Name="QSet<*>::iterator">
    <AlternativeType Name="QSet<*>::const_iterator" />
	<DisplayString>{{current value = {(reinterpret_cast<QHashNode<$T1,QHashDummyValue>*>(i.i)->key)}}}</DisplayString>
	<Expand>
		<Item Name="Current Key">reinterpret_cast<QHashNode<$T1,QHashDummyValue>*>(i.i)->key</Item>
	</Expand>
  </Type>
  <Type Name="QSetIterator<*>">
    <AlternativeType Name="QMutableSetIterator<*>" />
	<DisplayString>{{Next value = {(reinterpret_cast<QHashNode<$T1,QHashDummyValue>*>(i.i.i)->key)}}}</DisplayString>
	<Expand>
		<Item Name="Next Value">reinterpret_cast<QHashNode<$T1,QHashDummyValue>*>(i.i.i)->key</Item>
	</Expand>
  </Type>
<Type Name="QMapNode<*,*>">
	<DisplayString>{{ key={key} value={value} }}</DisplayString>
	
</Type>

<Type Name="QMap<*,*>">
  <DisplayString>{{size = {d->size}}}</DisplayString>
  <Expand>
  		<Synthetic Name="Key Type">
		 <DisplayString>{"$T1"}</DisplayString>
		</Synthetic>
		<Synthetic Name="Value Type">
		 <DisplayString>{"$T2"}</DisplayString>
		</Synthetic>

	<LinkedListItems>
      <Size>d->size</Size>
      <HeadPointer>d->forward[0]</HeadPointer>
      <NextPointer>forward[0]</NextPointer>
      <ValueNode>reinterpret_cast<QMapNode<$T1,$T2>* >(reinterpret_cast<char*>(this) - (sizeof(QMapPayloadNode<$T1,$T2>) - sizeof(QMapData::Node*)))</ValueNode>
    </LinkedListItems>
	</Expand>
</Type>

<Type Name="QVariant">
	<DisplayString Condition="d.type == 1">{{ bool={d.data.b} }}</DisplayString>
	<DisplayString Condition="d.type == 2">{{ int={d.data.i} }}</DisplayString>
	<DisplayString Condition="d.type == 3">{{ unsigned int={d.data.u} }}</DisplayString>
	<DisplayString Condition="d.type == 4">{{ long long={d.data.ll} }}</DisplayString>
	<DisplayString Condition="d.type == 5">{{ unsigned long long={d.data.ull} }}</DisplayString>
	<DisplayString Condition="d.type == 6">{{ double={d.data.d} }}</DisplayString>
	<DisplayString Condition="d.type == 7">{{ char={d.data.c} }}</DisplayString>
</Type>

</AutoVisualizer>
Die Datei muss in den "Common7\Packages\Debugger\Visualizers" Unterordner der VS Installation, dann zeigt der Debugger zumindest die wichtigsten Typen gut an.

Die natvis für Qt5 sieht etwas anders aus, muss ich zugeben. Die wird aber im Plugin mitgeliefert.

Ich würde übrigens nicht unterschreiben, dass man das VS auf keinen Fall benutzen sollte, wenn man Plattformunabhängigkeit braucht. Man muss eben ein wenig aufpassen, und gelegentlich auch auf den anderen Zielplattformen kompilieren.
BlackArma
Beiträge: 9
Registriert: 5. Januar 2014 21:07

Re: Include Problem

Beitrag von BlackArma »

Okay, danke für die Anworten :)
RHBaum hat geschrieben:Kann es sein das DU die Free variante hasst ? Glaub da waren einige dinge ned mit bei, was bei der standard kommerziellen version eh mitinstalliert wird ... Ciao ...
Meinst du von Visual Studio? Nop, ich habe die Ultimate Version.

Auf jeden Fall danke für eure Ratschläge!
Ich habe mir inzwischen das Addin für VS2012 angeschaut, muss mich noch zurechtfinden mache aber langsam Fortschritte.

Aber irgendwie nervt es mich schon das Qt-Creator nicht funktioniert bzw. ich nicht richtig builden kann was auch immer das Problem sein mag... aber egal, Hauptsache es geht mit VS.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Include Problem

Beitrag von RHBaum »

Meinst du von Visual Studio? Nop, ich habe die Ultimate Version.
Japp, meinte ich, und dann kann es das schon mal nicht sein :-)
Aber irgendwie nervt es mich schon das Qt-Creator nicht funktioniert bzw. ich nicht richtig builden kann was auch immer das Problem sein mag... aber egal, Hauptsache es geht mit VS.
Naja, bei mir iss das nen fixer Teil meiner täglichen arbeit ...
Ich bekomm ständig Abhängigkeiten zu libs rein, und ich muss sicherstellen das der kram dann kompiliert.
Meist arbeitet der Verursacher mit ner bestimmten version, da funzt alles, und dann ändern wir mal ne Version oder irgendwas und schon gehts nimmer.
Dann darf ich mich kümmern :-) und teilweisse selber die libs übersetzen, bzw anpassen. oder ne wrapper Dll drumrum schreiben, wenn die lib gar ned auf die neue version will (iss aber selten).

Wenn der Creator die VS includes selber nicht findet, könnt aber noch nen anderes problem sein. Ihm fehlen seine eigenen Umgebungsvariablen.
die setzt man im falle von X86_x32 mittels vsvars32.bat oder so ...
die bat liegt irgendwo im VS verzeichniss

mach mal testweise nen (batch)script, was dir mittels call die vsvars32.bat aufruft und dann den qt creator. Und versuch dann mal zu uebersetzen ....

Alternativ mach die Visual studio 2012 x32 EIngabeaufforderung auf (der macht dir auch nurn cmd.exe auf und callt die vsvars32.bat )
dann oeffnest mit der den creator und versuchst es mal ...

Ist aber alles nur Ferndiagnose ... ^^
Und generell haett ich drauf gewettet, das der qt creator das selber hinbekommt, wenn er eh schon die devenv finden muss zum kompilieren.
Aber ich mach halt ned so viel mit dem Qt Build zeugs ....

Aber generell wirst dich als programmierer noch hauefiger mit so Problemen rumschlagen ... mit der Zeit kriegst nen Gefuehl dafür :-)
Und dann ists auch Zeit den IDE's die Verantwortung für die Umgebung zu entziehen sondern selber verwalten (Buildgeneratoren) da bist um welten flexibler ....

Ciao ...
Antworten