Hallo Liste, mich plagt hier ein "eigentlich" alt bekanntes Problem: Auf der Arbeit liefern wir ein C/C++ Programm an unsere Kunden aus. Unsere Kunden haben von Suse 8.2 bis 10.2 so ziemlich jede Version dazwischen. Als Compiler benutzen wir einen selbst kompilierten gcc 3.3.5... Die einzige "statisch" hinzugelinkte Komponenten ist eine QT 3.3.8 enterprice Version. Alles andere wird dynamisch aus der jeweiligen Distri benutzt. (ARRRRGGGHHH...) Also die jeweiligen "shared object files" aus dem System. Bislang hatte das wohl scheinbar immer irgendwie funktioniert. (na ja, nicht immer. Einige Kunden klagen über undefinierbare Probleme, welche wir hier nicht nachvollziehen können.) Ich hatte mal gelernt, das man immer gut beraten ist ein Programm auf __jeder__ Distri zu kompilieren, für die ich mein Programm ausliefern möchte. So kann ich gefahrlos gegen die dynamischen Libs aus den jeweiligen Systemen linken... Was natürlich den Aufwand distributionsabhängiger Pakete mit sich bringt... Andernfalls muss ich alle Komponenten (libs, etc) statisch dazulinken. So könnte ich ein einziges grosses Binary für unterschiedliche Distri's benutzen. Grundsätzlich bin ich der Meinung das ich alle Komponenten mit dem selben Toolchain bilden bzw. Kompilieren muss. EGAL, ob nun dynamisch oder statisch gelinkt... Schlimm meiner Meinung auch, dass wir distccd benutzen, dieser ist wiederum auf Maschinen mit unterschiedlichen Distris zuhause. Klar alle benutzen den selben Compiler (was ja sein muss!!!), aber diverse Libs werden aus dem System benutzt und die sind bestimmt nicht alle mit dem selben gcc kompiliert worden. Jetzt benötigen wir einen Compiler ab Version 3.4, dieser bringt nun keine libstdc++.so.5 sondern die Version "6" mit. Diese Version wiederum bringt schon meine Suse 10.2 mit. Welche linke ich denn nun? Version der Distri oder Version vom Compiler? Und was ist, wenn ich gegen Libs linke die mit 'nem anderem Compiler compiliert worden sind. Also ich kompiliere mit dem gcc 3.4.6 gegen libs die mit dem gcc 4.1.2 Compiler erstellt worden sind!? Jetzt fängt nämlich erst der ganze Mist an. Programm kompiliert und einwandfrei, stürzt aber unweigerlich bei allen stellen im Programm ab, welche std::stringstream benutzen. Ganz egal ob LD_LIBRARY_PATH auf die libstdc++.s0.6 von 3.4.6 zeigt oder die von dem gcc 4.2.1 (suse 10.2) benutzt (/usr/lib) Kompiliere und linke ich aber nur gegen Komponenten der Distri klappt alles natürlich wie erwartet fehlerfrei... Soweit sogut, liege ich Grundsätzlich richtig? Wenn ja, wo kann ich beweise finden. Die meine Meinung unterstützen? Habe schon auf etliche Seiten in Wikipedia (ABI etc) verwiesen, wo definitiv Aussagen über unterschiedliche ABI Versionen aufmerksam gemacht wird... gcc 3.2 -> 3.4... Als "gentoo" Lover kenne ich das nur so. Benutze ich einen neuen Compiler, wird alles neu kompiliert... Hat der jemand eine Idee? Habe ich falsche Annahmen? Viele Grüsse Andre -- "... one of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs." -- Robert Firth --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org