-
Hi Robby,
> g++ linkt *.cpp besser
Nicht nur das g++ kleineren Code erzeugt als gcc,
sondern gcc linkt nicht mal gegen die libstdc++ !!
Hi Bernhard,
> bash-2.03# ...
Compilierst Du schon wieder als Root-user??
Programmentwicklung (für Anwenderproggis) bedarf keiner Root-Rechte!
8 Minuspunkte!
> Mit Deiner Begründung ab > [angelo] kann ich natürlich nichts anfangen.
siehe oben => Hi Robby, > g++ linkt *.cpp ...
> Natürlich habe ich in der Paketauskunft nach g++ gesucht.
SuSE hat das (genialerweise??) Paket 'gpp' genannt (in der Serie 'd Programmentwicklung')
Dazu brauchst Du aber noch das Paket 'libgpp', auch in Serie 'd'.
> bash-2.03# g++ -o qttest qttest.cpp I"${QTDIR}/include" -L"${QTDIR}/lib" -lqt
> g++: I/usr/lib/qt/include: No such file or directory
> qttest.cpp:1: qapplication.h: No such file or directory
> qttest.cpp:2: qlabel.h: No such file or directory
*g*
Du hast vor 'I"${QTDIR}/include"' das '-' (Minuszeichen) vergessen, daher suchte
g++ nach einem Programm 'I"${QTDIR}/include', das es natürlich nicht gibt.
Wenn g++ das include-Verzeichnis (/usr/lib/qt/include) also nicht findet, kann
es auch die 'qapplication.h' und 'qlabel.h' , die ja in jenem include-Verzeichnis sich befinden,
logischerweise nicht finden, ist also ein Folgefehler http://www.linuxforen.de/ubb/wink.gif
Gruss,
Dufty II
-
Hi Dufty II
root darf alles. root darf 1/4 Jahr lang lesen knobeln, testen, probieren, und dann gelingt ihm noch nicht einmal ein qttest. Also lass momentan noch 'rüberwachsen' die 8 Minuspunkte. Nicht, dass ich unzufrieden wäre, aber ich mag mich jetzt nur aufs 'Land sehen' konzentrieren:
bash-2.03# g++ -o qttest qttest.cpp -I$QTDIR/include -L$QTDIR/lib -lqt
/usr/i486-linux/bin/ld: cannot open crtbegin.o: No such file or directory
bash-2.03# less /usr/i486-linux/bin/ld
"/usr/i486-linux/bin/ld" may be a binary file. See it anyway?
OK, das vorhergehende hätte ich sehen müssen. Aber jetzt? Ich hab übrigens auch den fehlenden Zeiger auf char Array im Quellcode nachgesetzt. Also daran darfs jetzt nicht mehr liegen.
Bin ich zu blöde für Linux oder ist das so normal, wenn man mehr tun will als nur Anwender sein? Viele andere stellen mal eine Frage, vielleicht noch eine und sind dann glücklich (oder geben sich andere nur mit weniger zurieden?).
Gruss und Dank
Bernhard
-
Ich kann verstehen, daß Du langsam sauer bist, dennoch:
Kopf hoch Bernhard,
das schaffen wir schon,
wäre doch gelacht http://www.linuxforen.de/ubb/smile.gif
Also, mein non-root-Vorschlag gilt nach wie vor,
denn es ist so, daß root (im Defaultfall)
einen sehr kurzen Pfad aufweist
# echo $PATH
d. h., viele Programme kann root gar nicht
aufrufen, bzw. sie/er muß den den vollen Dateinamen benutzen, z.B.
# /opt/kde/bin/kfind
Eine Normaluserin braucht das (in der Regel) nicht, dort genügt ein
$ kfind
Vergleiche hierzu
$ echo $PATH
und Du wirst sehen, das dieser (normalerweise) VIEL länger ist als der von root.
Wie auch immer,
Ich habe keine SuSE, deshalb kann ich auch zu Deinem Problem wenig sagen, nur das
(in der Regel) sowas schon klappt, was Du machen willst, Deine Fehleranhäufung ist sehr, sehr unglücklich.
Ich sehe, daß crtbegin.o bei SuSE6.2 (auch) im paket 'egcs' drin ist,
hast Du dieses Paket installiert?
Wenn nicht, bitte nachholen.
Begründung: (als nicht-SuSE-expertin)
SuSE 6.2 hat 2 C-Compiler, einen
gcc und
einen egcs.
Der C++-Compiler (gpp) gehört zum egcs-c-compiler
So, dieses paket und libgpp und gpp sollten sich auf Deine Platte befinden.
*******************************************
>/usr/i486-linux/bin/ld: cannot open crtbegin.o: No such file or directory
> bash-2.03# less /usr/i486-linux/bin/ld
> "/usr/i486-linux/bin/ld" may be a binary file. See it anyway?
ld ist der "Link Editor", es ist also ein ausführbares Programm,
das Kommando 'less' zeigt in der Regel nur
ASCII-Dateien an und keine binaries.
Also, eine Compilation läuft so ab:
a) präprocessing
b) (eigentliches) compilieren
c) assemblieren
d) linked
Nun, "gcc" ist also nur ein frontend, die eingentlichen programme, die die Arbeit tun, sind für
a) cpp (das ist der C-Präprocessor)
b) cc1 (das ist der (wahre) C-Compiler)
c) as (das ist der Assembler)
d) ld (das ist der Link Editor, kurz Linker genannt)
Also,
es muß klappen,
das wird schon http://www.linuxforen.de/ubb/wink.gif
Gruss,
Dufty II
-
PS
Ich würde sogar die alten Pakete 'gcc' und
'gccfront' zuerst wieder DEinstallieren
und danach erst den 'egcs' einbauen.
(damit es keine Konflikte zwischen gcc und egcs gibt)
Aber wie gesagt, bin ich nicht die SuSE.
-
PPS
In der Praxis schaut dies dann so aus:
[angelo] [3:29:26] [~/bernhard] > g++ -v -Wall -O -I"${QTDIR}/include" -L"${QTDIR}/lib" -o qttest qttest.cpp -lqt
Schritt a:
/usr/lib/gcc-lib/i386-linux/egcs-2.91.66/cpp -lang-c++ -v -I/usr/lib/qt/include -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Di386 -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -Wall -Asystem(unix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ qttest.cpp /tmp/ccDDiuxO.ii
Schritt b:
/usr/lib/gcc-lib/i386-linux/egcs-2.91.66/cc1plus /tmp/ccDDiuxO.ii -quiet -dumpbase qttest.cc -O -Wall -version -o /tmp/ccAG7ILz.s
Weil wir hier C++ haben, heißt der 'wahre' C++-Compiler auch entsprechend 'cc1plus'
Schritt c:
/usr/i386-linux/bin/as -V -Qy -o /tmp/cc6DQedO.o /tmp/ccAG7ILz.s
Schritt d: Noch schnell gelinkt:
/usr/i386-linux/bin/ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o qttest /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/i386-linux/egcs-2.91.66/crtbegin.o -L/usr/lib/qt/lib -L/usr/lib/gcc-lib/i386-linux/egcs-2.91.66 -L/usr/i386-linux/lib /tmp/cc6DQedO.o -lqt -lstdc++ -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-linux/egcs-2.91.66/crtend.o /usr/lib/crtn.o
Bei 'crtbegin.o' handelt es sich also um
einen START-UP-Code (CReaTionBEGIN)
DEIN Code befindet sich in /tmp/cc6DQed0.o
alles andere ist eigentlich nur Beiwerk http://www.linuxforen.de/ubb/smile.gif
PPPS
Die C++-Standartbibliothek ist die libstdc++, die unter SuSE mit libqpp firmiert http://www.linuxforen.de/ubb/wink.gif
Alles halb so wild, nur die Bezeichnung sind
recht leicht verwechselbar (cpp,c++,gcc,g++,cc,etc.)
-
Berhard, mach dir nicht draus. Aller Anfang ist schwer. Wenn es mal richtig funktioniert wird es auch einfacher. Das bekommen wir schon hin, wie Dufty so schön sagte.
Grundsätzlich scheinen deine Packete nicht alle oder nicht vollständig installiert zu sein.
Außerdem, wie Dufty schon bemerkte, schau das du dich als normaler User einloggst.
Es ist dadurch bestimmt einfacher!
So, nun schaun wir mal...
Wenn's nicht klappt, schreib einfach.
Gruß
Robby http://www.linuxforen.de/ubb/wink.gif
-
-
Oops,
Verzeihng Bernhard,
jetzt sehe ich es erst:
Bei Deiner Nachricht um 23.30 (28.9.1999)
> gcc version 2.7.2.3
und
> ... /usr/lib/gcc-lib/i486-linux/2.7.2.3/crtbegin.o
Ohje, ja das ist der 'gcc', Du brauchst also
wirklich den 'egcs',
damit es mit den C++-Programmen hinhaut.
Da hätte ich genauer aufpassen sollen!
Oops, kannst Du mir nochmal verzeihen?
Gruss,
Dufty II
-
Und mit ölverschmierten Fingern wieder aus der Werkstatt zurück.
Ja, ich war einer optionalen Empfehlung gefolgt und hatte egcs de- und gccfronf installiert. Der Warnhinweis, daß mit egcs der 2-er Kernel nicht kompiliert werden kann, war der Grund. Hab das korrigiert und Deine 'P.S.-Reihenfolge' beachtet. Libgpp und (s. Thread) gpp waren installiert.
bash-2.03# g++ -o qttest qttest.cpp -I$QTDIR -L$QTDIR/lib -lqt
qttest.cpp:1: qapplication.h: No such file or directory
qttest.cpp:2: qlabel.h: No such file or directory
bash-2.03# locate qapplication.h
/usr/doc/packages/qt/html/qapplication.html
/usr/lib/qt/include/qapplication.h
bash-2.03# locate qlabel.h
/usr/doc/packages/qt/html/qlabel.html
/usr/lib/qt/include/qlabel.h
less kann bei 'y' auch Binaries darstellen, bringt hier für die Demo aber nur eine Zeile, Locate zwei (und bei 'ner Demo lass ich das Original gerne stehen).
Auf jeden Fall wird jetzt nicht mehr das Directory angemahnt, also ein Schritt weiter. Aber da Fehlt noch mehr. Die Paketbeschreibungen sind für den Einstieg teilweise zu knapp. Schade, daß Du keine SuSianerin bist bzw. ich kein RedHatti (ich peil sowieso schon das neue RedHat an).
Übrigens SuSE-expertin? Donnerwetter. Als ich gebaut wurde, ward ich mit dem Wissen ausgestattet, daß beide 'Sorten' gleichwertig sind. Aber die Realität wollte, daß ich bei dem 'y' am Namensende, dem klaren Schreibstil und dem unglaublich tiefen Durchblick automatisch an einen! Dufty dachte. http://www.linuxforen.de/ubb/redface.gif http://www.linuxforen.de/ubb/redface.gif http://www.linuxforen.de/ubb/redface.gif Wieviele Minuspunkte gibt das?
Übrigens Sauer? Nein. Hab aber schon beim Runden-Einstieg das Problem gesehen: Bei so wenigen Fragen hier, in KDE (na ja, da sind's schon ein paar mehr) und Allgemein (s. KDE) werde ich wohl sehr viele Fragen selbst stellen müssen. Und ich fackel da nicht lange. Ich schick die Zaungäste mal dahin, wo wirklich was los ist (ca. 150 Einzelbeiträge pro Tag! allein in der Borland-VCL-Runde ((auch private Initiative)), mein Startbeitrag war also nicht für die Foren-Mitglieder gedacht) und versuche zu demonstrieren, wie man Fragen der individuellen Mentalität entsprechend in etwa bringen kann. Mehr kann ich nicht tun. - Natürlich, 150, wozu soviel. Wesentlich kleinere Zahlen bleiben überschaubar.
Gruss, Dank und gut Hack
Bernhard
-
> bash-2.03# g++ -o qttest qttest.cpp -I$QTDIR -L$QTDIR/lib -lqt
Mmmh, probiers mal mit
bash-2.03$ g++ -o qttest qttest.cpp -I$QTDIR/include -L$QTDIR/lib -lqt
http://www.linuxforen.de/ubb/wink.gif
Gruss,
Dufty II
-
PS
> bash-2.03# g++ -o qttest qttest.cpp -I$QTDIR/include -L$QTDIR/lib -lqt
> /usr/i486-linux/bin/ld: cannot open crtbegin.o: No such file or directory
> bash-2.03# less /usr/i486-linux/bin/ld
> "/usr/i486-linux/bin/ld" may be a binary file. See it anyway?
Ich sollte Dich vielleicht noch darauf hinweisen, wie
diese Fehlrmeldung zu interpretieren ist
und ein 'less' (oder locate) hier gar nichts bringt:
Das proggis '/usr/i486-linux/bin/ld" hat bei seiner Arbeit eine
Datei 'crtbegin.o' nicht gefunden.
D. h. wenn Du was suchen willst, mußt
Du
$ locate crtbegin.o
oder besser
$ find / -name crtbegin.o
eingeben.
Gruss,
Dufty II
-
PPS
Der Hinweise für den Umgang mit egcs gilt für
2.0.x-kernel, nicht für 2.2.x-kernel wie sie
in SuSE 6.1 bzw. 6.2 enthalten sind.
> Redhatti
Oh nein!
Nur Debian bringt die Erlösung http://www.linuxforen.de/ubb/wink.gif
Gruss,
Dufty II
-
Uff,
während ich tüftle und noch mal verschiedenes nachlese, macht Ihr schon wieder die nächsten Vorschläge? - Richtiger Teamgeist ist halt unbezahlbar.
Nein, Dufty II,
da gibts nichts zu verzeihen. Ist ohnehin erstaunlich, wie weit Du auf einer anderen Plattform helfen kannst.
Mach Dir keine Sorgen, Robert,
klar hab ich vieles, was Dufty II jetzt gesagt hat, nicht verstanden. Aber auf meiner Platte ist noch genügend Platz. Irgendwann werd ichs schon verstehen. Ich bin nicht der Typ, der was fertiges benutzen will. Bewundern, was andere zum laufen gebracht haben, selbst etwas gut handelbares zum Laufen bringen, das ist es. Davor muss halt gelernt werden.
Das mit dem Normal-User scheint ja wirklich wichtig zu sein. Aber ändert das was an dem momentan vorhandenen Problem? OK, also mal als Normal-User versuchen.
Gruss
Bernhard
-
Mmmh, sollte es immer noch nicht klappen,
dann vielleicht mal mit -v posten, also
bash-2.03$ g++ -v -o qttest qttest.cpp -I$QTDIR/include -L$QTDIR/lib -lqt
& das Resultat davon
damit mensch besser erkennt, wo es noch zwickt.
Gruss,
Dufty II
PS
Also, es gibt noch mehr Möglichkeiten, z.B.
$ ldconfig -v
Dieser Befehl schaut nach, welche Libraries genützt werden.
Mensch kann auch (später) einmal
$ g++ -v -c -o qttest.o -I$QTDIR/include -L$QTDIR/lib qttest.cpp
benutzen, um dann 'mit der Hand' zu linken:
$ ld -dynamic-linker /lib/ld-linux.so.2 -o qttest /usr/lib/crt1.o qttest.o -lqt /usr/lib/crtn.o
ach ja, ....
[Diese Nachricht wurde geändert von Dufty II (am 29 September 1999).]
-
Na endlich, Teilerfolg http://www.linuxforen.de/ubb/biggrin.gif http://www.linuxforen.de/ubb/biggrin.gif http://www.linuxforen.de/ubb/biggrin.gif
Hab die cpp nach /var/prj kopiert und alle Rechte vergeben. User hat keinen Zugriff, root hat den 18 KB großen qttest gebaut und volle Zugriffs- und Ausführungsrechte vergeben.
Root erhält die Fehlermeldung: Command not found.
Wenn User file öffnen will, wird der X-Server gesucht.
User erhält beim X-Start einen schwarzen Bildschirm (genauer, Bildschirm schaltet sich ab).
Ob das was mit dem eingeschränkten Grafikkarten-Support zu tun hat? Hmmm...
Root- und User-Verwalter muss lesen.
Uff, Linux-Sprache, schwere Sprache http://www.linuxforen.de/ubb/biggrin.gif http://www.linuxforen.de/ubb/biggrin.gif http://www.linuxforen.de/ubb/biggrin.gif
Gruss
Bernhard
P.S. Dufty II, siehs mir nach, daß ich less und locate auf den falschen file angesetzt habe. Ich wollte es jetzt einfach wissen. Und was sieht man da?...