Ich versuche, eine XPCOM-Komponente für Firefox 3.6. *. Es verwendet die statisch kompilierte libsqlite3 Version 3.7.4 (mit programmunabhängiger Codegenerierung - Option fPIC-Compiler). Das Problem, auf das ich stoße, ist, dass sobald Firefox die Komponente lädt und es startet, die sqlite3_libversion_number()
3007001 zurückgibt, während das Makro SQLITE_LIBVERSION_NUMBER
auf 3007004 festgelegt ist. Ich bin mir ziemlich sicher, dass ich mit der korrekten statischen sqlite3-Bibliothek ... Aber wie kann ich das überprüfen? ldd
Ausgabe des generierten generierten Objekts listet libsqlite3.so nicht als Abhängigkeit auf (obwohl libxul.so, das zum Erstellen der XPCOM-Komponente verwendet wird, libsqlite3.so verwendet). Wie werden alle sqlite3 Funktionsaufrufe in eine andere Version von SQLite aufgelöst?Statische Verknüpfung einer Bibliothek unter Linux
PS: Liegt es daran, dass die Bibliotheken mit -fPIC kompiliert werden und Firefox sie später mit dlopen
lädt?
Ja ... Einschluss-Reihenfolge ist sehr wichtig beim Verlinken gegen statische Bibliotheken, die mit diesen Linker-Flags (aus g ++) gelöst werden: '-Wl, - Start-Gruppe -Wl, - -Endgruppe ". Dies führt dazu, dass der Linker rekursiv nach Symbolen in diesen Archiven sucht. –
themoondothshine