Hi In der Vergangenheit habe ich diverse kleine Programme erstellt, die meistens nur aus einer einzelnen .c oder .cpp-Datei bestehen. Diese Programme habe ich dann einfach mit "gcc test.cpp -lm -otest" kompiliert, was auch problemlos funktionierte. Seit der Umstellung aus Suse 9.0 geht das nicht mehr, kompilieren ist noch ok, dann aber Linkfehler zB.: cfjh@bastau:~/povray/scenes> gcc makeneu3s.cpp -lm -omakeneu3s /tmp/ccl9cp0N.o(.eh_frame+0x12): undefined reference to _gxx_personality_v0' collect2: ld returned 1 exit status cfjh@bastau:~/povray/scenes> Was muß ich noch zusätzlich linken oder ist es jetzt nicht mehr möglich, Programme auf diese 'schnelle' Art zu kompilieren (wie sonst) ? gcc Verson ist 3.3.1, Suse Linux 9.0 prof Jürgen
Jürgen Hochwald schrieb:
In der Vergangenheit habe ich diverse kleine Programme erstellt, die meistens nur aus einer einzelnen .c oder .cpp-Datei bestehen. Diese Programme habe ich dann einfach mit "gcc test.cpp -lm -otest" kompiliert, was auch problemlos funktionierte.
Das ist verwunderlich.... gcc ist der C-Compiler, die Endung .cpp beim Quellcode deutet aber an, dass es sich um einen C++ Code handelt. Dementsprechend muesste er mit g++ uebersetzt werden. Ferner sollte man ein selbstgeschriebenes Programm nie "test" nennen, denn das ist auch der Name eines Shell- Builtin.
Seit der Umstellung aus Suse 9.0 geht das nicht mehr, kompilieren ist noch ok, dann aber Linkfehler zB.:
cfjh@bastau:~/povray/scenes> gcc makeneu3s.cpp -lm -omakeneu3s /tmp/ccl9cp0N.o(.eh_frame+0x12): undefined reference to _gxx_personality_v0' collect2: ld returned 1 exit status cfjh@bastau:~/povray/scenes>
Siehe oben. Wenn es es C++ Quellcode ist, muss er mit g++ uebersetzt werden. Ferner kann man ohne den Inhalt des Pro- gramms zu kennen, selten etwas darueber sagen, was schief laeuft. Daher immer das allerminimalste Programm nennen, das den Fehler reproduzieren laesst. Ist das ein kurzer Quelltext, dann kann man ihn gleich mitschicken, ist er zu lang zum Posten, dann sollte man ihn online stellen.
Was muß ich noch zusätzlich linken oder ist es jetzt nicht mehr möglich, Programme auf diese 'schnelle' Art zu kompilieren (wie sonst) ?
Dem Suffix nach zu urteilen verwendest Du den falschen Com- piler. CU, Th.
Jürgen Hochwald
In der Vergangenheit habe ich diverse kleine Programme erstellt, die meistens nur aus einer einzelnen .c oder .cpp-Datei bestehen. Diese Programme habe ich dann einfach mit "gcc test.cpp -lm -otest" kompiliert, was auch problemlos funktionierte.
Und genau da ist der Fehler! gcc erkennt an der Endung zwar, das es sich um C++ Quellen handelt und ruft das C++-Frontend auf, linkt aber am Ende nicht die zwingend nötigen Bibliotheken hinzu. Zum Kompilieren von C++-Code *immer* g++ bzw. c++ verwenden, dann werden auch die erforderlichen Bibliotheken mit eingebunden. Philipp
participants (3)
-
Jürgen Hochwald
-
Philipp Thomas
-
Thomas Hertweck