2010-06-01 7 views
1

J'essaye de créer un UDF mysql qui correspondra à une empreinte digitale en utilisant la librairie SDK gratuite de Digital Persona. J'ai écrit un UDF trivial comme une expérience d'apprentissage qui a bien fonctionné. Cependant, lorsque j'ai ajouté une dépendance à l'objet partagé de Digital Persona, je ne peux plus obtenir MySql pour charger mon UDF.MySQL UDF en utilisant la bibliothèque partagée ne se chargera pas

I ajouté inclut aux en-têtes de DP et compilé mon UDF en utilisant:

gcc -fPIC -Wall -I/usr/src/mysql-5.0.45-linux-i686-icc-glibc23/include -shared -o dp_udf.so dp_udf.cc 

J'ai aussi essayé d'ajouter l'argument -static, mais chaque fois que je remets en marche MySql, je reçois l'erreur:

Can't open shared library 'dp_udf.so' (errno: 0 /usr/local/mysql/lib/plugin/dp_udf.so: undefined symbol: MC_verifyFeaturesEx) 

MC_verifyFeaturesEx est une fonction définie "dpMatch.h" que j'ai incluse, et est implémentée dans libdpfpapi.so que j'ai essayé de placer au même endroit que mon dp_udf.so et dans/usr/lib. Est-ce que je fais quelque chose de mal avec mon appel à gcc (mes compétences C++ sont rouillées) ou est-ce que MySql n'autorise pas les UDF à utiliser des objets partagés supplémentaires?

+0

Le champ UDF * défini par l'utilisateur * ou * la fonction définie par l'utilisateur *? - De l'acronyme Hater. –

+0

Mysql UDF est "Fonction définie par l'utilisateur". Une fonction C qui implémente une interface spécifique que MySql peut appeler. http://dev.mysql.com/doc/refman/5.0/en/adding-functions.html – Jarrod

Répondre

1

Votre problème est que votre bibliothèque dépend d'une autre, car MySQL/dl ne le sait pas et ne le charge donc pas. Vous devez explicitement lier votre bibliothèque à la bibliothèque de Digital Persona. Vous pouvez le faire en utilisant le -l{libname} (et peut-être -L/lib/path).