Dienstag, Februar 05, 2008

Ärger mit Templates

Erstaunlich, wie man manchmal Zeit mit unnötigem Kram verbringen kann. Ich habe beschlossen, KDE 4 einmal auszuprobieren, nicht zuletzt wegen KDevelop.

Nun ist KDE 4 zwar schon brauchbar, aber nicht unbedingt etwas, was man in seinem jetzigen Zustand auf normale Anwender loslassen sollte. Wenn schon, denn schon, dachte ich mir und holte mir also gleich das Allerneueste aus dem Subversion-Repository. Soweit lief alles problemlos, doch als ich dann aus meiner schönen neuen KDE 4-Sitzung heraus KDevelop starten wollte, verabschiedete sich selbiges schon beim Starten mit

kdevelop: libs/serialization/src/extended_type_info.cpp:74:
static void boost::serialization::detail::tkmap::insert(
const boost::serialization::extended_type_info*):
Assertion `lookup(eti) == m_self->m_map.end()' failed.

auf der Konsole. Nachdem eine Internetsuche recht erfolglos verlaufen war und auch im IRC-Channel niemand so recht weiter wusste, habe ich mir die Sache genauer angesehen. Etwa zwei Stunden und etliche Flüche über die schwer debugbare Boost-Bibliothek später musste ich feststellen, dass zwei Templateinstanziierungen in verschiedenen Bibliotheken, die eigentlich identisch sein sollten, nicht vom Runtime-Linker zusammengeführt wurden.

Da kratzt man sich schon mal am Kopf. Nach diversen anderen Experimenten hat letztlich einfach ein kompletter Rebuild von KDevPlatform das Problem behoben.

Bleibt nur noch die Frage, warum die Templateinstanziierungen nicht von Anfang an identisch waren. Womöglich lag es daran, dass ich den make-Vorgang beim ersten Durchlauf neustarten musste, nachdem ich eine fehlende, aber von cmake nicht bemängelte Bibliothek nachinstalliert hatte. Oder ich habe soeben das erste Zeichen dafür erhalten, dass mein Thinkpad demnächst des Denkens müde sein könnte...

Keine Kommentare: