Hallo,
ich habe im Moment ein ziemlich komisches Problem mit shared libraries. Zur Vereinfachung: Ein Programm A baut auf Bibliothek B, und diese wiederum auf C. Nun sind A, B und C alle sauber unter /usr/bin und /usr/lib installiert und alles funktioniert (Debian-Pakete). Für die Entwicklerversion wandert alles nach /usr/local/... und zwar zuerst C, dann B, und anschließend die Anwendung A. Nun sollen die Bibliotheken aus /usr/local/lib, nicht /usr/lib benutzt werden. Bibliothek C macht keine Probleme, aber B (die C benötigt) sagt, wenn man ldd aufruft, daß sie C aus /usr/lib referenziert - was falsch ist, da die Version aller Komponenten sich geändert hat.
Beim compilieren wird korrekt -L /usr/local/lib -lC angegeben. In der libB.la steht auch /usr/local/lib als dependency_path drin, und trotzdem scheint sich B nicht zu wundern daß in der Version aus /usr/lib einige Symbole fehlen (nachgeprüft mit nm).
Also rufe ich ldconfig auf. Nun funktioniert /usr/local/bin/A wunderbar - nur /usr/bin/A referenziert jetzt plötzlich auch die neuen Bibliotheken. Und stürzt während der Programmausführung mit einer "undefined reference" ab, nämlich genau dann, wenn die Funktion aufgerufen wird, die nur in der alten, nicht aber in der neuen Bibliotheksversion drin ist.
Wie läßt sich das vermeiden?
Josef Spillner