c++ - 使用共享库的 MySql UDF 不会加载

标签 c++ mysql linux gcc user-defined-functions

我正在尝试创建一个 mysql UDF,它将使用 Digital Persona 的免费 linux SDK 库匹配指纹。我写了一个简单的 UDF 作为学习经验,效果很好。但是,当我向 Digital Persona 的共享对象添加依赖项时,我无法再让 MySql 加载我的 UDF。

我将包含添加到 DP 的 header 并使用以下方法编译了我的 UDF:

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

我也尝试添加 -static 参数,但每当我重新启动 MySql 时,我都会收到错误消息:

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

MC_verifyFeaturesEx 是一个定义为“dpMatch.h”的函数,我将其包含在 libdpfpapi.so 中,我尝试将其放置在与我的 dp_udf.so 相同的位置和/usr/lib 中。

我对 gcc 的调用是否有问题(我的 C++ 技能生锈了)或者 MySql 是否不允许 UDF 使用额外的共享对象?

最佳答案

你的问题是你的库依赖于另一个库,但是 MySQL/dl 不知道这一点,因此不会加载它。您需要将您的图书馆明确链接到 Digital Persona 的图书馆。您可以使用 -l{libname}(也许还有 -L/lib/path)来做到这一点。

关于c++ - 使用共享库的 MySql UDF 不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951472/

相关文章:

mysql - 如何将值传递给外键

mysql - SQL - 如果 ID 之一具有特定列值,则选择所有匹配的 ID

php - MySQL 和 PHP : How to arrange data from below example

linux - 如何修复 undefined symbol : drmGetDevice? 的 genymotion 错误

c++ - 链表行为

c++ - const 引用默认值

c++ - Qt中的函数匹配

c++ - Release模式下 OSX/AppleClang 上的 boost::container::flat_multimap 崩溃

c++ - 使用 Makefile 的交叉编译使用了错误的包含

linux - 关于AES128bit-CBC