Hallo, wir haben ein Projekt bekommen, welches unter Windows gebaut wurde. Dort gibt es eine Datei mit dem Namen features.h Jetzt sollen wir das ganze Projekt in qt-creator unter Linux mit gcc bauen. Vom vorgegebenen Code dürfen wir aber ncihts ändern. Jetzt ist das Problem, dass diese features.h inkludiert wird Linux inkludiert aber anscheinen seine eigene und es kracht/bzw. kann nicht compiliert werden. Für das Projekt haben wir in qt-creator eine .pro und mehrerer .pri dateien. In den .pri Dateien steht eigentlich welche Dateien gebaut werden soll. Gibt es eine Möglichkeit genau zu sagen, welche features.h angezogen werden soll? Wenn wir die Datei umbenennen funktioniert es, dann haben wir allerdings was geändert, was wir vermeiden sollten. Gibt es eine Möglichkeit genau zu sagen, dass die features.h vom Projekt angezogen werden soll? Oder kommen wir um eine Umbenennung nicht herum?
??? features.h ist ein Systemheader (des gcc-Compilers), der sollte gar kein Bestandteil des Projektes sein. Was also ist jetzt genau das Problem? Oliver
Eigentlich müsste das klappen, wenn das Verzeichnis was die Datei enthält mit -I in der compiler command line auftaucht. Wie sieht die aus?
Vermutlich hat das Projekt eine eigene features.h, und wurde unter Windows nicht mit gcc compiliert. Wenn die dann noch fälschlicherweise als Systeminclude per <> includiert wurde, statt mit ““, dann kann man wenig machen. Aber dazu muß Zelda mal mehr Infos liefern. Oliver
Zelda schrieb: > Vom vorgegebenen Code dürfen wir aber ncihts ändern. Wenn ich so eine Scheiße schon lese ...
Hannes J. schrieb: > Zelda schrieb: >> Vom vorgegebenen Code dürfen wir aber ncihts ändern. > > Wenn ich so eine Scheiße schon lese ... solange das Herumfuhrwerken in selbiger bezahlt wird ist das schon ok. Aber Du hast schon recht: irgendwer hat möglicherweise tief und fest geschlafen als der Auftrag an Land gezogen wurde.
Hannes J. schrieb: > Zelda schrieb: >> Vom vorgegebenen Code dürfen wir aber ncihts ändern. > > Wenn ich so eine Scheiße schon lese ... Ja, das ist schon von vorne herein Krampf. Zelda schrieb: > Gibt es eine Möglichkeit genau zu sagen, welche features.h angezogen > werden soll? Das gibt man als Teil der #include-Direktive an. #include <features.h> sucht erst bei den Systemheadern, dann bei denen des Programms. #include "features.h" macht es umgekehrt. Was man noch versuchen könnte, wäre, den Header nochmal extra über die Kommandozeile mit -i (nicht -I) einzubinden, aber das würde ich als sehr unschönen Hack sehen. Besser wäre, es richtig zu machen, was aber wohl auf eine Änderung des Code hinaus läuft.
Zelda schrieb: > Vom vorgegebenen Code dürfen wir aber ncihts ändern. Die Vorgabe ist Schwachsinn. Der, der sie gemacht hat, hat gewiss nicht überprüft ob es überhaupt möglich ist sie einzuhalten.
Rolf M. schrieb: > Das gibt man als Teil der #include-Direktive an. #include <features.h> > sucht erst bei den Systemheadern, dann bei denen des Programms. #include > "features.h" macht es umgekehrt. Das dachte ich auch, aber in der gcc-Manpage steht: You can specify any number or combination of these options on the command line to search for header files in several directories. The lookup order is as follows: 1. For the quote form of the include directive, the directory of the current file is searched first. 2. For the quote form of the include directive, the directories specified by -iquote options are searched in left-to-right order, as they appear on the command line. 3. Directories specified with -I options are scanned in left-to-right order. 4. Directories specified with -isystem options are scanned in left-to-right order. 5. Standard system directories are scanned. 6. Directories specified with -idirafter options are scanned in left-to-right order. Ich verstehe das so, dass Verzeichnisse, die mit -I angegeben sind, immer zuerst durchsucht werden, oder? Sprich, wenn es ein features.h in ./include/ gibt und ich -I./include/ mache, sollte es immer das nehmen vor dem in /usr/include, egal ob ich die "" oder die <> Syntax benutze.
Ja. Noch genauer lässt sich das mit -quote und -isystem angeben. Oliver
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.