Votre composant XPCom C++ ne se charge pas. Voici quelques opérations à effectuer pour tester votre composant:
static NS_METHOD nsFoobarRegistrationProc(nsIComponentManager *aCompMgr,
nsIFile *aPath,
const char *registryLocation,
const char *componentType,
const nsModuleComponentInfo *info)
{
PR_fprintf(PR_STDOUT, "Composant Foobar chargé\n");
return NS_OK;
}
static const nsModuleComponentInfo components[ ] =
{
{ NSFOOBAR_CLASSNAME,
NSFOOBAR_CID,
NSFOOBAR_CONTRACTID,
nsFoobarConstructor,
nsFoobarRegistrationProc
}
};
Si au lancement de Firefox/XulRunner "Composant Foobar chargé" ne s'affiche pas, il y a un problème lors de l'enregistrement de votre bibliothèque (n'oubliez pas de faire un #include <nspr.h>). Dans ce cas:
ldd xulapp/components/nsFoobar.so
Vous aurez des dépendances non satisfaites par rapport aux bibliothèques de Mozilla, ce qui est logique. Par contre, toutes autres dépendances non satisfaites posera problème. Vous pouvez préciser ou chercher les bibliothèques via la variable d'environnement LD_LIBRARY_PATH:
LD_LIBRARY_PATH=/foobar/lib
nm -g xulapp/components/nsFoobar.so
Les symboles recherchés sont précédés d'un U.
LD_PRELOAD=xulapp/components/nsFoobar.so ls
Tant que cette comande ne fait pas l'équivalent d'un ls, votre composant ne pourra pas fonctionner. Le linker ld chargera votre composant grâce à la variable d'environnement LD_PRELOAD.
Cette méthode est carrément moche !!! Je suis convaincu qu'il y a mieux ... à vous de jouer :)
N'hésitez pas à utiliser l'outil strace pour vérifier qu'il cherche bien votre composant.
Si vous compilez avec la SDK, évitez de prendre celle fournie par Mozilla, mais compilez là vous même (vous pourez l'obtenir en faisant un make -C xpinstall/packager).
Le contenu de cette page est disponible selon certaines conditions de réutilisation. Lire aussi la page des informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.