如何在QDB库中添加用户定义的函数?

时间:2013-12-06 11:12:39

标签: sql c sqlite qnx name-mangling

QDB是由QNX Neutrino软件包提供的数据库。我浏览了QDB文档以添加用户定义的SQL函数:http://www.qnx.com/developers/docs/6.5.0/topic/com.qnx.doc.qdb_en_dev_guide/writing_functions.html?cp=2_0_8

我创建了一个源文件,我的用户定义了用C和qdb_function结构定义编写的SQL函数。我用make文件构建它来创建libudf.so。 根据QDB的建议,我在qdb.cfg中添加了 Function = udftag@libudf.so 。但是在shell提示符下运行qdb时,它会给出错误(粗体):

qdb -I basic -V -R set -v -c /etc/sql/qdb.cfg -s de_DE @cldr -o tempstore = / fs / tmpfs

QDB:没有注册处理损坏数据库的脚本。

qdb:处理[TempMainAddressBook]功能 - 无法访问共享库

并且qdb立即退出。

我试过以下事情:

  1. 确保在make文件中添加sqlite3库

  2. 源代码严格按C语言使用指令:extern“C”以避免名称错误,因为文件扩展名为.cpp。我也试过.c扩展名。

  3. 给出qdb.cfg中libudf.so的绝对路径:功能= udftag@/usr/lib/libudf.so

  4. qdb_funcion struct仅在库的源代码中正确定义。

  5. 尝试不使用静态函数声明(在qdb文档中提到)

  6. 在尝试所有点击和试用后,我每次都会收到相同的错误无法访问共享库

    如果有任何人有任何想法解决此错误,请分享。

1 个答案:

答案 0 :(得分:1)

建议1:通过设置LD_DEBUG = 1运行qdb,如:

LD_DEBUG=1 qdb command line options 

这会在动态加载器尝试定位然后加载.so文件时输出大量调试信息。在显示“无法访问”消息之前,检查它输出的路径是什么。

建议2:显而易见但请确保.so文件的权限正常。您是否设置了执行权限?

建议3:如果从系统中完全删除.so文件,请检查错误消息是否相同

建议4:增加小写'v'-s的数量。 QDB可能支持更多,随着您增加数量逐渐提供更详细的信息(6应该足以完全冗长)