On Monday 25 June 2001 22:20, Steffen Liebergeld wrote:
Am Montag, 25. Juni 2001 20:22 schrieben Sie:
Ähm... du hast nicht zufällig "gcc" statt "g++" verwendet? Hm. Bitte umändern.
Ertappt! Sorry, ich hab mich von dem Begriff "Gnu Compiler Collection" irritieren lassen. Mit g++ und c++ funktioniert alles wie gewollt. Und so richtig logisch ist es für einen Einsteiger auch nicht, dass jeder Compiler selber aufgerufen wird und nicht die gesammte Collection "gcc".
Du kannst durchaus alles mit gcc Compilieren, nur beim Linken musst Du aufpassen.
Warum hat man dann nicht ein Library Packet für alle Compiler?
Weil die verschiedenen Sprachen, die GCC unterstützt grundverschiedene Bibliotheken erfordern - die Standards dieser Sprachen liegen zu weit auseinander. Das alles in eine Bibliothek zu packen wäre leicht problematisch. Ausserdem würde so eine "Mega-Bibliothek" locker auf einige MB anwachsen.
Wenn Du mit gcc linkst wird im Hintergrund etwa das gemacht: ld <deine .o's> -lc bei g++ sieht das schon so aus: ld <deine .o's> -lstdc++ -lm -lc bei Fortran, Java etc. sieht es wieder ganz anders aus, da ganz andere Bibliotheken gebraucht werden.
Leider ist der Linker nicht in der Lage automagisch zu erkennen, welche Bibliothek er einbinden muss damit ein .o funktioniert - schließlich kann er ja nicht wissen, ob cout bei Dir ein Symbol aus der libstdc++ oder aus einer eigenen Bibliothek ist. Wenn Du mit dem Compiler linkst überläßt Du die Wahl der Standardsymbole dem Compiler, der dann die Standardbibliotheken der jeweiligen Sprache einsetzt.
Demzufolge: wenn Du C++ Objekte mit gcc linkst nimmt er einfach an Du hättest einen Grund dafür und erwartet, dass Du die C++-Symbole durch eigene Bibliotheken auflöst.
Konrad