"undefined reference"
-
Danke, das war die Ursache
! Mit dem Dateinamen png_load.cpp funktioniert es einwandfrei.Vielen Dank!
Grüße
cn
-
irgendwie müsste man es aber auch hinbekommen, dass man die Datei auch datei.c benennen darf, als der Quelltext mit dem c compiler übersetzt wird, und dann gelinkt, aber welche einstellungen du da im genauen machen musst kann ich dir nicht sagen.
-
liegt es nicht eher am GCC? der erkennt doch standardmäßig an der endung, um welche sprache es sich handelt. Im Hilfe Teil der letzte parameter kann das glaube ich manuell angeben.
-
Also ich hätte jetzt an ein Problem mit fehlendem extern "C" gedacht.
Weil ja offensichtlich das PNG ding in C ist, und der Header in C++ genutzt wird.
-
Krux schrieb:
irgendwie müsste man es aber auch hinbekommen, dass man die Datei auch datei.c benennen darf, als der Quelltext mit dem c compiler übersetzt wird, und dann gelinkt, aber welche einstellungen du da im genauen machen musst kann ich dir nicht sagen.
Als Entwicklungsumgebung verwende ich CDT (Eclipse). Die Entwicklungsumgebung übergibt im Wesentlichen bestimmte Schalter an das Kommandozeilenprogramm. D.h. möglicherweise gibt es bei GCC einen Schalter, der das Resultat "C++-kompatibel" macht. Aber momentan reicht mir die Lösung mit der anderen Dateiendung vollkommen aus und ich bin froh, dass es funktioniert. Die Manpage von GCC hat knapp 10 000 Zeilen. Da den richtigen Schalter zu finden überfordert mich etwas...
Dennoch wäre es interessant zu wissen!
-
piXelshooter schrieb:
liegt es nicht eher am GCC? der erkennt doch standardmäßig an der endung, um welche sprache es sich handelt. Im Hilfe Teil der letzte parameter kann das glaube ich manuell angeben.
Momentan werden C-Dateien (.c) mit dem "GCC C Compiler" übersetzt, CPP-Dateien (.cpp) hingegen mit dem "GCC C++ Compiler", was im Endeffekt ein und der selbe Übersetzer ist, aber abhängig von der Dateiendung unterschiedlich kompatible Ausgaben erzeugt. Welchen Hilfeteil meinst du konkret?
Tada____S schrieb:
Also ich hätte jetzt an ein Problem mit fehlendem extern "C" gedacht.
Danke! So funktioniert es jetzt auch gemischt! Damit wäre mein Problem elegant gelöst.

-
ich meinte den parameter -x <language> {c, c++, assembler, none}
-
piXelshooter schrieb:
ich meinte den parameter -x <language> {c, c++, assembler, none}
Verstehe, jetzt ist klar
! Danke für den Hinweis. Was ist nun sinnvoller? extern "C" oder -x?PS: Das Forum hier ist echt gut! Hier sind zig Leute die sich auskennen
.
-
Wenn Du eine C-Funktion hast, compiliere sie mit einem C-Compiler. So war es vom Autor gedacht, so sollte es auch gemacht werden, zumal einige C-Programme in C++ nicht übersetzen werden. Wenn Du die Funktion in C++-Nutzen willst, packe extern "C" { ... } um den Header.
Wenn Du selbst ein C-Programm schreibst biete dem C++-Programmierer direkt an, es ohne Modifikationen benutzen zu können:
// myheader.h - Includeguards hier, bitte #ifdef __cplusplus extern "C" { #endif /* Hier der ganze Kram */ #ifdef __cplusplus } // extern "C" #endif
-
Gut, vielen Dank für die Information. Nachdem du jetzt einen Unterschied zwischen C und C++ beim Übersetzen erwähnst, worauf muss ich da konkret achten? Gibt es eine Liste von Unterschieden die man vermeiden sollte? Der Übersetzer ist ja eigentlich sowohl für C als auch für C++ der selbe (in meinem Fall GCC), wird also nur unterschiedlich aufgerufen.
-
cn schrieb:
piXelshooter schrieb:
ich meinte den parameter -x <language> {c, c++, assembler, none}
Verstehe, jetzt ist klar
! Danke für den Hinweis. Was ist nun sinnvoller? extern "C" oder -x?PS: Das Forum hier ist echt gut! Hier sind zig Leute die sich auskennen
.Gut dass du das festgestellt hast, dann kannst du ja ein account anlegen, und die kommenden Anfängerfragen beantworten, damit das auch andere von diesem Forum denke

-
Klar, mache ich.