dlopen & co/Plugin Qt SQLite : charger une library déjà charger par un plugin, résolution de symbole.
1 réponse
me
Bonjour,
Note : Il n'y a pas vraiment une question sur le C++, c'est plus une histoire de
compilateur et de linker, je ne sais pas ou poster, dirigez moi sur une autre
forum si nécessaire.
J'ai un programme écrit avec Qt et utilisant le plugin SQLite.
Dans ce programme j'ai besoins d'ajouter des fonctions utilisables depuis une
requête sql.
J'ai fait divers hacks et je suis arrivé à un résultat étonnant, je m'explique :
Initialement je voulais accéder à la fonction sqlite3_create_function en
utilisant le trio dlopen/dlsym/dlclose
Mais je me suis rendu compte qu'il n'était pas utile d'utiliser dlsym et je suis
surpris que mon programme marche, seul l'appel à dlopen suffi pour que je puisse
utiliser la fonction sqlite3_create_function
Je vous poste le code ci dessous, mais j'aimerais avoir votre avis sur la
pérennité de ce code et de sa portabilité (à l'exception de MSWIndows) ?
Et également comment se fait il qu'en invoquant uniquement dlopen je peux
utiliser la fonction sqlite3_create_function, dont l'adresse n'est pas résolue à
la compilation ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Toxico Nimbus
Le 12/10/2012 21:16, me a écrit :
Bonjour,
Note : Il n'y a pas vraiment une question sur le C++, c'est plus une histoire de compilateur et de linker, je ne sais pas ou poster, dirigez moi sur une autre forum si nécessaire.
J'ai un programme écrit avec Qt et utilisant le plugin SQLite. Dans ce programme j'ai besoins d'ajouter des fonctions utilisables depuis une requête sql.
J'ai fait divers hacks et je suis arrivé à un résultat étonnant, je m'explique :
Initialement je voulais accéder à la fonction sqlite3_create_function en utilisant le trio dlopen/dlsym/dlclose Mais je me suis rendu compte qu'il n'était pas utile d'utiliser dlsym et je suis surpris que mon programme marche, seul l'appel à dlopen suffi pour que je puisse utiliser la fonction sqlite3_create_function
Je vous poste le code ci dessous, mais j'aimerais avoir votre avis sur la pérennité de ce code et de sa portabilité (à l'exception de MSWIndows) ? Et également comment se fait il qu'en invoquant uniquement dlopen je peux utiliser la fonction sqlite3_create_function, dont l'adresse n'est pas résolue à la compilation ?
Les symboles manquants sont toujours résolus. Le fait de donner RTLD_LAZY comme drapeau ne fait que reporter la résolution (en fait c'est utile uniquement si tu as plusieurs dlopen.
Le 12/10/2012 21:16, me a écrit :
Bonjour,
Note : Il n'y a pas vraiment une question sur le C++, c'est plus une histoire de
compilateur et de linker, je ne sais pas ou poster, dirigez moi sur une autre
forum si nécessaire.
J'ai un programme écrit avec Qt et utilisant le plugin SQLite.
Dans ce programme j'ai besoins d'ajouter des fonctions utilisables depuis une
requête sql.
J'ai fait divers hacks et je suis arrivé à un résultat étonnant, je m'explique :
Initialement je voulais accéder à la fonction sqlite3_create_function en
utilisant le trio dlopen/dlsym/dlclose
Mais je me suis rendu compte qu'il n'était pas utile d'utiliser dlsym et je suis
surpris que mon programme marche, seul l'appel à dlopen suffi pour que je puisse
utiliser la fonction sqlite3_create_function
Je vous poste le code ci dessous, mais j'aimerais avoir votre avis sur la
pérennité de ce code et de sa portabilité (à l'exception de MSWIndows) ?
Et également comment se fait il qu'en invoquant uniquement dlopen je peux
utiliser la fonction sqlite3_create_function, dont l'adresse n'est pas résolue à
la compilation ?
Les symboles manquants sont toujours résolus. Le fait de donner
RTLD_LAZY comme drapeau ne fait que reporter la résolution (en fait
c'est utile uniquement si tu as plusieurs dlopen.
Note : Il n'y a pas vraiment une question sur le C++, c'est plus une histoire de compilateur et de linker, je ne sais pas ou poster, dirigez moi sur une autre forum si nécessaire.
J'ai un programme écrit avec Qt et utilisant le plugin SQLite. Dans ce programme j'ai besoins d'ajouter des fonctions utilisables depuis une requête sql.
J'ai fait divers hacks et je suis arrivé à un résultat étonnant, je m'explique :
Initialement je voulais accéder à la fonction sqlite3_create_function en utilisant le trio dlopen/dlsym/dlclose Mais je me suis rendu compte qu'il n'était pas utile d'utiliser dlsym et je suis surpris que mon programme marche, seul l'appel à dlopen suffi pour que je puisse utiliser la fonction sqlite3_create_function
Je vous poste le code ci dessous, mais j'aimerais avoir votre avis sur la pérennité de ce code et de sa portabilité (à l'exception de MSWIndows) ? Et également comment se fait il qu'en invoquant uniquement dlopen je peux utiliser la fonction sqlite3_create_function, dont l'adresse n'est pas résolue à la compilation ?
Les symboles manquants sont toujours résolus. Le fait de donner RTLD_LAZY comme drapeau ne fait que reporter la résolution (en fait c'est utile uniquement si tu as plusieurs dlopen.