Qt5 - erste Schritte

(DE) Projekte für OS/2, eCS und ArcaOS
(EN) OS/2, eCS and ArcaOS related projects
User avatar
LotharS
Posts: 846
Joined: Sun 29. Dec 2013, 20:07
Location: Düsseldorf

Qt5 - erste Schritte

Post by LotharS »

Im Anschluss zu meinen Studien zu Qt4 - siehe diesen Thread (jüngsten Beitrag) und meinen Demo-Vortrag voriges Jahr in Köln - möchte ich ein wenig Qt5 versuchen (In meiner Linux-VM lief zwar bereits Qt5, aber gehört hier nicht hin).

Installiert habe ich die von dmik dankenswerterweise bereitgestellten Portierungen :D (außer die web...-Pakete, dh. von mir gibt's garantiert keinen weiteren Browser 8-) ). Und um zu sehen was passiert, habe ich ein Projekt "tunix" gebastelt bzw. aus dem Vorjahr übertragen:

(1) Sourcen:
tunix.pro:

Code: Select all

QT += core
QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle
TEMPLATE = app

# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

TARGET = tunix
SOURCES += main.cpp
und main.cpp (hoffe, niemand erhebt copyright drauf :lol: ):

Code: Select all

int main()
{
    return 0;
}
(2) Weiter alles im Projekt-Unterverzeichnis, an zusätzlichen Einstellungen habe ich nichts gedreht, alles outofthebox:
- "qmake-qt5.exe tunix.pro -r -spec os2-g++"
liefert "Makefile" und daneben ".qmake.stash", sehen für mich aufs erste plausibel aus.
- "make -w"
liefert allerdings einen Fehler:

Code: Select all

make: Entering directory `G:/projekte/qt5/tunix'
g++ -Zomf -Zstack 0x2000 -Zhigh-mem -Zlinker "DISABLE 1121" -Zlinker /PM:VIO -o
tunix.exe main.obj   /@unixroot/usr/lib/Qt5Core.lib  -lcx
weakld: cannot open library file 'C:\usr\lib\cx_s.a'.
emxomfld: weak prelinker failed. (rc=8)
make: *** [tunix.exe] Error 1
make: Leaving directory `G:/projekte/qt5/tunix'
Erklären kann ich mir - ahnungslos - das Phänomen nicht. Suspekt(?) jedoch im Makefile diese Zeile:
"LIBS = $(SUBLIBS) /@unixroot/usr/lib/Qt5Core.lib -lcx",
und zwar das Anhängsel "-lcx", woher auch immer.... Auf meinem System finde ich weder eine Library "cx" noch eine Datei "cx_s.a" und hab's bisher noch nirgends gefunden. Was hab' ich bloß noch nicht richtig ?? (Bevor ich mich an ein GUI-HelloWold wage...)

Lasse ich aber im Makefile manuell das "-lcx" einfach weg :idea: und compiliere neu, so geht der Build fehlerfrei durch, und das Reultat tut was es soll: nämlich nix (die Kommandozeile geht bloß auf und zu)...

Das gleiche passiert mit einem Art "Hello World" mit Qt5-Syntax. Voriges Jahr mit Qt4 in Köln lief's noch :ugeek:

_diver
Posts: 281
Joined: Fri 27. Jun 2014, 10:57

Post by _diver »

LotharS wrote:
Thu 21. Jul 2022, 11:33
Im Anschluss zu meinen Studien zu Qt4 - siehe diesen Thread (jüngsten Beitrag) und meinen Demo-Vortrag voriges Jahr in Köln - möchte ich ein wenig Qt5 versuchen (In meiner Linux-VM lief zwar bereits Qt5, aber gehört hier nicht hin).

Installiert habe ich die von dmik dankenswerterweise bereitgestellten Portierungen :D (außer die web...-Pakete, dh. von mir gibt's garantiert keinen weiteren Browser 8-) ). Und um zu sehen was passiert, habe ich ein Projekt "tunix" gebastelt bzw. aus dem Vorjahr übertragen:

(1) Sourcen:
tunix.pro:

Code: Select all

QT += core
QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle
TEMPLATE = app

# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

TARGET = tunix
SOURCES += main.cpp
und main.cpp (hoffe, niemand erhebt copyright drauf :lol: ):

Code: Select all

int main()
{
    return 0;
}
(2) Weiter alles im Projekt-Unterverzeichnis, an zusätzlichen Einstellungen habe ich nichts gedreht, alles outofthebox:
- "qmake-qt5.exe tunix.pro -r -spec os2-g++"
liefert "Makefile" und daneben ".qmake.stash", sehen für mich aufs erste plausibel aus.
- "make -w"
liefert allerdings einen Fehler:

Code: Select all

make: Entering directory `G:/projekte/qt5/tunix'
g++ -Zomf -Zstack 0x2000 -Zhigh-mem -Zlinker "DISABLE 1121" -Zlinker /PM:VIO -o
tunix.exe main.obj   /@unixroot/usr/lib/Qt5Core.lib  -lcx
weakld: cannot open library file 'C:\usr\lib\cx_s.a'.
emxomfld: weak prelinker failed. (rc=8)
make: *** [tunix.exe] Error 1
make: Leaving directory `G:/projekte/qt5/tunix'
Erklären kann ich mir - ahnungslos - das Phänomen nicht. Suspekt(?) jedoch im Makefile diese Zeile:
"LIBS = $(SUBLIBS) /@unixroot/usr/lib/Qt5Core.lib -lcx",
und zwar das Anhängsel "-lcx", woher auch immer.... Auf meinem System finde ich weder eine Library "cx" noch eine Datei "cx_s.a" und hab's bisher noch nirgends gefunden. Was hab' ich bloß noch nicht richtig ?? (Bevor ich mich an ein GUI-HelloWold wage...)

Lasse ich aber im Makefile manuell das "-lcx" einfach weg :idea: und compiliere neu, so geht der Build fehlerfrei durch, und das Reultat tut was es soll: nämlich nix (die Kommandozeile geht bloß auf und zu)...

Das gleiche passiert mit einem Art "Hello World" mit Qt5-Syntax. Voriges Jahr mit Qt4 in Köln lief's noch :ugeek:
Qt5 braucht libcx und libc. yum install libcx-devel müsse reichen.

User avatar
LotharS
Posts: 846
Joined: Sun 29. Dec 2013, 20:07
Location: Düsseldorf

Post by LotharS »

_diver wrote:
Thu 21. Jul 2022, 14:27
Qt5 braucht libcx und libc. yum install libcx-devel müsse reichen.
Passt, Danke!! :D
libc, libcx und libc-devel waren bereits drauf (letzteres damals für Qt4 entdeckt), nun auch libcx-devel: läuft. Irgendwie also scheint die "Datei" cx_s.a darin aufzugehen, Linux-Geheimnisse... ;)

Hier nochmals zusammengefasst: Mindestens (vermutlich)...

Code: Select all

yum install qt5-devel libc-devel libcx-devel kbuild-make binutils

User avatar
LotharS
Posts: 846
Joined: Sun 29. Dec 2013, 20:07
Location: Düsseldorf

Post by LotharS »

LotharS wrote:
Thu 21. Jul 2022, 11:33
...Bevor ich mich an ein GUI-HelloWold wage...
Einfach mutig auf meine alten Sourcen los, zu den oops Warnings hilft wie üblich RTFM 8-) Die unterschiedlichen QT-Versionen (sogar innerhalb Qt5.x) sind im Netz ja hervorragend dokumentiert.
Mein in Köln gezeigtes Beispiel war leicht umzustellen. Damit aber diese Nur-Demo nichts auf Platte schreibt, habe ich die "interessanten" Knöpfe deaktiviert (würden im Original-Test mit festen Namen tun).