Как добавить пользовательскую функцию в библиотеку QDB?
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
Я создал исходный файл, в котором пользователь определил функцию SQL, написанную на языке C, и определение структуры qdb_function. Я создал его с помощью файла make для создания libudf.so. По предложению QDB я добавил Function = udftag@libudf.so в qdb.cfg. Но при запуске qdb в командной строке выдает ошибку (жирным шрифтом):
qdb -I basic -V -R set -v -c /etc/sql/qdb.cfg -s de_DE @ cldr -o tempstore = / fs / tmpfs
QDB: не зарегистрирован сценарий для обработки поврежденной базы данных.
Функция qdb: processing [TempMainAddressBook] - Невозможно получить доступ к общей библиотеке
и QDB выходит немедленно.
Я пробовал следующие вещи:
убедился, что библиотека sqlite3 добавлена в файл make
исходный код находится строго на C с использованием директивы: extern "C", чтобы избежать искажения имени, так как расширение файла -.cpp. Я тоже пробовал с расширением.c.
учитывая абсолютный путь к libudf.so в qdb.cfg как: Function = udftag@/usr/lib/libudf.so
Структура qdb_funcion правильно определена только в исходном коде библиотеки.
пробовал без использования статического объявления функции (упомянуто в документации по qdb)
После попытки всех попаданий и испытаний, я получаю ту же ошибку каждый раз, которая не может получить доступ к общей библиотеке
Если у кого-то есть идеи, чтобы решить эту ошибку, пожалуйста, поделитесь.
1 ответ
Предложение 1: запустите qdb, установив LD_DEBUG=1, как в:
LD_DEBUG=1 qdb command line options
Это выведет много отладочной информации из динамического загрузчика, когда он попытается найти и затем загрузить файлы.so. Проверьте, какой путь он выводит перед отображением сообщения "Не удается получить доступ".
Предложение 2: очевидно, но убедитесь, что разрешения для файла.so в порядке. У вас есть разрешение на выполнение?
Предложение 3: проверьте, является ли сообщение об ошибке идентичным, если вы полностью удалите файл.so из системы
Предложение 4: увеличить количество строчных букв 'v'-s. QDB, вероятно, поддерживает больше, с постепенным увеличением количества подробной информации по мере увеличения чисел (6 должно быть достаточно для полной детализации)