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立即退出。
我试过以下事情:
确保在make文件中添加sqlite3库
源代码严格按C语言使用指令:extern“C”以避免名称错误,因为文件扩展名为.cpp。我也试过.c扩展名。
给出qdb.cfg中libudf.so的绝对路径:功能= udftag@/usr/lib/libudf.so
qdb_funcion struct仅在库的源代码中正确定义。
尝试不使用静态函数声明(在qdb文档中提到)
在尝试所有点击和试用后,我每次都会收到相同的错误无法访问共享库
如果有任何人有任何想法解决此错误,请分享。
答案 0 :(得分:1)
建议1:通过设置LD_DEBUG = 1运行qdb,如:
LD_DEBUG=1 qdb command line options
这会在动态加载器尝试定位然后加载.so文件时输出大量调试信息。在显示“无法访问”消息之前,检查它输出的路径是什么。
建议2:显而易见但请确保.so文件的权限正常。您是否设置了执行权限?
建议3:如果从系统中完全删除.so文件,请检查错误消息是否相同
建议4:增加小写'v'-s的数量。 QDB可能支持更多,随着您增加数量逐渐提供更详细的信息(6应该足以完全冗长)