J'essaie de créer un composant XPCOM pour Firefox 3.6. *. Il utilise la version 3.7.4 de libsqlite3 compilée statiquement (avec une génération de code indépendante du programme - option du compilateur -fPIC). Le problème auquel je suis confronté est qu'une fois que Firefox charge le composant et qu'il commence à s'exécuter, le sqlite3_libversion_number()
renvoie 3007001 tandis que la macro SQLITE_LIBVERSION_NUMBER
est définie sur 3007004. Je suis à peu près sûr que je suis lié à la bibliothèque statique sqlite3 correcte ... Mais comment puis-je vérifier cela? ldd
La sortie de l'objet partagé généré ne répertorie pas libsqlite3.so en tant que dépendance (bien que libxul.so, utilisé pour créer le composant XPCOM, utilise libsqlite3.so). Comment tous les appels de fonction sqlite3 sont-ils résolus vers une version différente de SQLite? PS: Est-ce parce que les bibliothèques sont compilées avec -fPIC et que Firefox les charge ensuite en utilisant dlopen
?Liaison statique d'une bibliothèque sous Linux
Répondre
Je regarde la commande d'inclusion. J'ai aussi passé toute une journée ou quelque chose de similaire à me demander pourquoi le fseek() a échoué, pas directement sur Linux mais sur Bada, et en utilisant Eclipse IDE. Le hic était que la même fonction ayant la même signature était exportée par un fichier .a "beta" de Bada SDK. Et j'ai d'abord importé le mauvais fichier .a par accident.
En linux, il effectuera une résolution récursive des symboles - c'est-à-dire si libxul utilise libsqlite3 alors firefox résoudra indirectement le symbole en incluant libsqlite3 de libxul.
Ce n'est pas le cas sur une machine AIX où la résolution de symboles récursifs (basée sur des bibliothèques dépendantes) ne sera pas effectuée.
Cela peut ne pas être le problème réel - mais il vaut la peine de vérifier.
Vérifiez également si sqlite3 est rétrocompatible (ce que je suppose), alors vous pouvez lier libxul et d'autres bibliothèques à la dernière version de sqlite3.
Oui, SQLite est très rétrocompatible mais la reconstruction de libxul à partir de la source n'est pas tout à fait une option en ce moment ... – themoondothshine
Si libxul est lié dynamiquement à sqlite, il n'est pas nécessaire de compiler libxul. Il peut être directement placé dans LD_LIB_PATH. Je ne sais pas pourquoi cela doit être compilé. –
- 1. Bibliothèque statique libupnp sous Linux
- 2. Liaison statique et dynamique de la même bibliothèque sous Linux
- 3. c bibliothèque statique linux
- 4. Erreur lors de la liaison statique de libgmp sous Linux
- 5. Liaison statique des librairies dans linux
- 6. Liaison de la bibliothèque statique dans une autre bibliothèque statique
- 7. Bibliothèque statique GNUSTEP et liaison correcte
- 8. Problème de liaison d'une bibliothèque statique C++
- 9. Liaison statique à une bibliothèque dynamique. glibc
- 10. Liaison de la bibliothèque C++ statique dans la bibliothèque c
- 11. Soci comme une bibliothèque statique sur linux/ubuntu?
- 12. code statique analyseur C++ sous Linux
- 13. Liaison statique avec pthreads & stdC++?
- 14. Bibliothèque statique - Bibliothèque statique utilisant son propre fichier Qt .so
- 15. Bibliothèque statique import
- 16. Liaison statique d'un dylib
- 17. Compilation d'une liaison Python sous Linux
- 18. Liaison d'un module php avec une bibliothèque .so sur linux
- 19. Portabilité pthread sous Linux
- 20. Liaison statique avec Sunstudio
- 21. Utilisation de fichiers de bibliothèque sous Linux
- 22. Liaison statique de GSL (ou d'une autre bibliothèque) dans une bibliothèque partagée
- 23. Liaison statique en C#
- 24. Vérification de l'existence d'une fonction dans une bibliothèque sous Linux
- 25. Liaison libsox sous Windows
- 26. Problème de liaison statique à Botan sous Windows utilisant MSVC
- 27. Distribuer la bibliothèque statique/dynamique à Linux via .deb
- 28. bibliothèque statique dans un makefile, en utilisant g linux ++ compilateur
- 29. Restriction des symboles dans une bibliothèque statique Linux
- 30. Bibliothèque statique de compilation croisée de Linux pour Windows
Oui ... L'ordre d'inclusion est très important lors de la liaison avec des bibliothèques statiques, résolu à l'aide de ces indicateurs de liens (de g ++): -Wl, - start-group -Wl, - -end-group'. Cela entraînera la recherche récursive de l'éditeur de liens pour les symboles dans ces archives. –
themoondothshine