Jump to content

RED C++ QT


Recommended Posts

Das False in "Executing make False" sollte da nicht sein. Du hast da einen Bug gefunden. Der betrifft den C/C++ und Delphi Compile Dialog. Das Kompilieren beim Hochladen ist nicht betroffen. Wird in der nächsten Version gefixt sein.

 

Unter Linux kannst du das bis dahin selbst beheben. In /usr/share/brickv/plugin_system/plugins/red/program_info_c_compile.py Zeile 41 von

 

self.button_make.clicked.connect(self.execute_make)

 

zu

 

self.button_make.clicked.connect(lambda: self.execute_make(None))

 

abändern.

Link zu diesem Kommentar
Share on other sites

Das Make File was QT bei mir auf dem Rechner erstellt sieht etwas anders aus als im Beispiel in der Doku. Es enthält auch die Pfadangaben vom PC.

Vielleicht könnte man dem Brivkviewer beibringen für C das Makefile auf Wunsch auch automatisch mit erzeuegen zu lassen. Er kennt ja die Pfade auf dem RED. ;)

Link zu diesem Kommentar
Share on other sites

Normalerweise gibt es bei QT doch eine Projektdatei.

Mit qmake und der Projektdatei kann man in einem Buildverzeichnis ein Makefile generieren. Dieses Makefile ist spezifisch (auf jedem Rechner ggf. anders).

 

D.h. ich dachte man müsste auf dem RED auch nur qmake aufrufen und danach make im build-Verzeichnis.

 

Oder ist das bei Dir anders?

 

Ansonsten könntest Du über den Qt-Creator per Rechtsclick auf das Projekt (nicht die pro-Datei) den Befehl "qmake ausführen" aufrufen. In der Console siehst Du, was ausgeführt wird.

 

Mit diesen Befehlen kann ich ein kleines Projekt bei mir bauen:

 

mkdir build_dir
cd build_dir
qmake /absoluter_pfad/zu/qt_test.pro -r -spec linux-g++ CONFIG+=debug
make

 

Sowas schon mal ausprobiert?

Link zu diesem Kommentar
Share on other sites

So gerade mal getestet.

 

tf@red-brick:qmake HUD.pro -r -spec linux-g++ CONFIG+=debug

tf@red-brick:~/programs/HUD/bin$ make                                         

/usr/bin/uic-qt4 mainwindow.ui -o ui_mainwindow.h                             

g++ -c -pipe -mno-ms-bitfields -g -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_GUI_LIB

-DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include

/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.c

pp                                                                             

cc1plus: error: unrecognized command line option ‘-mno-ms-bitfields’           

make: *** [main.o] Error 1                                                     

:o

Link zu diesem Kommentar
Share on other sites

Du hast qmake im Home-Verzeichnis aufgerufen oder ist das hier nur eine abgekürzte Schreibweise unten?

 

Da Du make im "bin" aufrufst, ist dort ein neues "Makefile" entstanden? Ist der Timestamp aktueller als auf Deinem PC?

 

Der Fehler sieht nämlich danach aus, dass noch das Windows-Makefile aktiv ist oder Du hast fixe Windows-Einstellungen hinterlegt. Die GNU-Compile-Doku sagt zu dem Schalter:

 

Currently -m[no-]ms-bitfields is provided for the Microsoft Windows X86 compilers to match the native Microsoft compiler.

 

=> diese Compile-Option gibt es wohl nur unter Windows.

Link zu diesem Kommentar
Share on other sites

So. Hab mal weiter probiert.

Bin jetzt weiter. Er fängt an zu compilieren bricht dann aber ab weil er bestimmte Include Dateien vom QT nicht findet.

 

g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQ

T_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../bin -I/usr/include/qt4/QtCore -

I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I../bin -I. -o main.o ../bin

/main.cpp                                                                     

In file included from ../bin/main.cpp:6:0:                                     

../bin/openglwindow.h:41:25: fatal error: QtGui/QWindow: No such file or directo

ry                                                                             

compilation terminated.                                                       

Link zu diesem Kommentar
Share on other sites

Hier ist noch was mit der Include-Definition schief:

 

der Compiler-Aufruf setzt "-I/usr/include/qt4/QtGui" als Parameter.

Deine Source includier "QtGui/QWindow", d.h. das Unterverzeichnis "QtGui" müsstest Du gar nicht mehr angeben in der Source oder die Include-Option beim Compilieren muss anders sein.

 

Wenn das auf Windows funktioniert ist da noch etwas anders eingestellt oder Du nutzt ggf. eine andere Qt Version (welche nutzt Du eigentlich? 4 oder 5)?

Link zu diesem Kommentar
Share on other sites

So. Wieder etwas weiter.

Hab mal die OpenGL Funktionen rauskommentiert.

Nu meckert der Compiler zum Beispiel die Funktion "_mbsnbcmp" und "_strlwr" an.

 

Im Moment die aktuelle QT Version.

Vielleicht müsste man die QT Version auf dem RED aktualisieren.

 

Kann ich das von Hand erledigen?

 

Und noch zwei Hinweise.

Die Console im Viewer sollte scrollbar sein. Sonst sieht man nicht alle Ausgaben.

Und Beim Upload Dialog spollte sich der Viewer den letzen Pfad merken sollange er nicht ausgeschalten wird.

Ist schon extrem nervig wenn man programmiert ,öfters Files ändert und neu hochladen muß.

Man muß sich dann ständig zum Verzeichnis neu durchklickern. ;)

Link zu diesem Kommentar
Share on other sites

Die beiden Funktionen sind kein Standard-C, sondern Microsoft-Erweiterungen. Die wirst Du ersetzen müssen.

 

strlwr könnte man so umsetzen:

#include<ctype.h>
#include<string.h>

char *strlwr(char *str)
{
  char *s = str;

  while (*s) {
      *s = tolower(*s);
      ++s;
  }

  return str;
}

 

Bei mbsnbcmp musste ich erst nachsehen, was die macht (kannte ich nicht mal): das scheint eine Art strncmp zu sein (String compare mit begrenzter Anzahl Zeichen). strncmp ist Standard-C (denke ich).

 

Nachtrag: strncmp funktioniert mit UTF-8 ggf. nicht korrekt. Verwendest Du das - multibyte Strings?

 

Willkommen bei der Multi-Plattform Entwicklung  ;)

Link zu diesem Kommentar
Share on other sites

  • 5 months later...

So. Mal das Thema "aufwärmen". ;D

 

Ich versuche gerade auf dem RED die neue Variante mit OpenGL zu compilieren.

 

Es kommt der Fehler.

../bin/GL/gl.h:13:21: fatal error: windows.h: No such file or directory

 

Das betrift folgende Zeile

 

#if !(defined(WINGDIAPI) && defined(APIENTRY))

#include <windows.h>

#else

#include <stddef.h>

#endif

 

Das unter Linux die windows.h nicht existiert ist mir schon klar , weil sie Windows spezifisch ist.

Aber warum versucht der Compiler diese zu laden? :o

Das ist doch abhängig von dieser Zeile?

#if !(defined(WINGDIAPI) && defined(APIENTRY))

 

Vielleicht kann mir ein Linux C++ Guru auf die Sprünge helfen!

Link zu diesem Kommentar
Share on other sites

Aber warum versucht der Compiler diese zu laden? :o

Das ist doch abhängig von dieser Zeile?

#if !(defined(WINGDIAPI) && defined(APIENTRY))

 

Ist es. gl.h versucht hier auf komische Art und Weise Windows zu detektieren. Wenn WINGDIAPI nicht definiert aber APIENTRY definiert ist dann will es windows.h includen. Dein Problem hier wird sein, dass irgendwer anders APIENTRY definiert. Das gl.h an diesem doch eher generischen Namen versucht Windows zu erkennen ist problematisch.

 

Paste mal den Anfang der gl.h Datei bis zu der Stelle wo der Fehler auftritt, oder häng die ganze gl.h Datei an einen Post an. Entweder wird vor dieser Stelle ein anderer Header included, der APIENTRY definiert, oder APIENTRY wird im Compiler-Befehl per -D Option definiert. Dass gilt es zu finden und zu beheben.

 

Oder du kannst gl.h hacken und

 

#if !(defined(WINGDIAPI) && defined(APIENTRY))

 

durch

 

#if 0

 

ersetzen und sehen wie weit du dann kommst.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...