|
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
|
||||||
Создание динамической библиотеки для СУБД Oracle02.02.2012, 12:44. Показов 7870. Ответов 27
Метки нет (Все метки)
Добрый день.
У Субд Оракл есть технология подключения сторонних программ (например на с или с++). Подключаются они к базе в виде динамических библиотек (*.so). Эта технология работает отлично до тех пор , пока подключаемая библиотека использует другие стандартные же библиотеки (которые находятся в /usr/lib или /usr/local/lib). Но вдруг если в программе есть #include файлы совершенно с другой дериктории, а сами библиотеки находятся в другой, то в самой базе (после подключения данной библиотеки) возникают проблемы при обращении к функциям, определенным в этих include файлах и библиотеках. Суть: 1) программа :
.SUFFIXES: .cpp #CC=gcc #CCC=g++ CPCCC=$(CCC)$(CXX) # For FreeBSD you should add -pthread to LDFLAGS. CFLAGS=-DUNIX -DHAVE_LIMITS_H $(ARCH_FLAGS) $(add_CPPFLAGS) -I$(CSP_INCLUDE) -I$(CSP_INCLUDE)/cpcsp -I$(CSP_INCLUDE)/asn1c/rtsrc -I$(CSP_INCLUDE)/asn1data -DSIZEOF_VOID_P=$(SIZEOF_VOID_P) -g LDFLAGS= $(ARCH_FLAGS) -L $(CSP_LIB) -lasn1data -lssp -lcapi10 -lcapi20 $(CSP_EXTRA_LIBS) $(add_ldflags) -g OBJS=$(out).o $(out): $(OBJS) $(CPCCC) $(OBJS) $(LDFLAGS) -o $@ $(add_libs) clean: for i in $(out) $(OBJS) ; do test -r "$${i}" || continue ; rm "$${i}" ; done .cpp.o: $(CPCCC) $(CFLAGS) -c -fPIC -o $@ $< Как я понял, сначала с помощью gcc и директивы include файлов (-I) это все компилится и создается объектный файл (*.о). Потом с помощью g++ и директивы подклчаемых библиотек (-L) создается исполняемый файл.Здесь ,я думаю, большую роль играет add_libs...(но для программы , которая описана выше - здесь будет ошибка так как не хватает main - поэтому я довольствуюсь только объектным файлом, полученным в результате работы gcc). Но для СУБД мне нужна библиотека (*.so). Поэтому я решил взять данный make файл за основу. Впоследствии я сделал так : gcc -shared -o *.so *.o, получил баблиотеку и закинул в базу... Но, увы, fail... (при выполении вылетает ошибка что функции не определены) Позже, посмотрев содержимое объектного файла и файла библиотеки (коанда nm) , обнаружил вот это : U CryptAcquireContextА U CryptReleaseContext U CryptSetProvParam U _GLOBAL_OFFSET_TABLE_ 0000000000000000 T Mysign u - значит данные контекст не определен. Думаю, поэтому ошибка. Пробовал во время создания объектного файла явно указать подключаемые библиотки через (-L), но неудачано... Что делать? Помогите, пожалуйста, кто знает как решить эту проблему... С Linux я работаю впервые, так что простите если сильно в чем то затупил... Время для разработки поджимает, поэтому не хватает времени на чтение всех аспектов данной проблемы... Заранее спасибо, всем кто откликнулся...
0
|
||||||
| 02.02.2012, 12:44 | |
|
Ответы с готовыми решениями:
27
Создание динамической библиотеки
Не видит содержимое динамической библиотеки |
|
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
|
||
| 02.02.2012, 16:08 [ТС] | ||
|
Я все делал под админом. Другие (более простенькие программы) - работают отлично. Все же я думаю что тут с объектным файлом что-то нето... Там перед названиями функций символ "U" стоит - значит объект не определен. Но это тока в объектном файле ! Когда формируется выполняемый файл - там уже подключаются все библиотеки и все эти функции инициализируются. Вопрос как тоже самое сделать для динамической библиотеки...
0
|
||
|
|
||
| 02.02.2012, 16:25 | ||
|
fluence, расскажи, как ты пытаешься использовать получившуюся .so ?
Добавлено через 2 минуты намек понятен? Добавлено через 1 минуту еще покажи вывод: > echo $PATH
0
|
||
|
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
|
|||||||||||||||||
| 02.02.2012, 16:44 [ТС] | |||||||||||||||||
|
http://www.sql.ru/forum/actual... tid=911435 Кому интересно - можете почитать - там не много написано Способ использования прост : данная библиотека копируется в папку оракла, потом выполняются следующие действия: 1) Cсылка на файл
[root@localhost Mysign]# echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin :/home/redhat/bin [root@localhost Mysign]#
0
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
|
||
| 02.02.2012, 17:03 [ТС] | ||
|
0
|
||
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
||||||
| 02.02.2012, 23:10 | ||||||
|
тебе надо добавить путь до твоих "нестандартных" либ в переменную LD_LIBRARY_PATH
что-то типа
1
|
||||||
|
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
|
||
| 03.02.2012, 11:09 [ТС] | ||
|
ОЛОЛО.....
Последовал совету и установил LD_LIBRARY_PATH. Что из этого вышло: Если файл называется Mysign.cpp , то объектный файл Mysign.so создается с помощью g++ , а при использовании на стороне клиента вылетает undefined __gxx_personality , но предыдущей ошибки уже нету! Если же файл имеет расширение Mysign.c , то объектный файл Mysign.so создается с помощью gсс , а при использовании вылетает то, с чего я начал данную тему. Вобщем, Happy End - меня скоро уволят.... Кстати когда я компилил даже Mysign.c - исполняемый файл то работал ! Ему пофиг было с или срр... Добавлено через 34 минуты Даже когда файл - Mysign.cpp : я делаю g++ -shared -o Mysign.so Mysign.o выходит ошибка, которая в самом начале темы (не определен CryptAquireContextA) Добавлено через 4 минуты Делал [root@chtest01 lib]# export LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64 [root@chtest01 lib]# echo $LD_LIBRARY_PATH /opt/cprocsp/lib/amd64 [root@chtest01 lib]# Добавлено через 18 минут Ура я сделал ! Если выбераеш .с то при создании библиотеки нужно делать так , gcc -shared -o Mysign.so Mysign.o -L/opt/cprocsp/lib/amd64 -lcapi10 -lcapi20 Если .срр , то g++ -shared -o Mysign.so Mysign.o -L/opt/cprocsp/lib/amd64 -lcapi10 -lcapi20, только нужно явно указать _cdecl Добавлено через 28 минут Огромное спасибо всем, кто пытался помочь!!!
0
|
||
| 03.02.2012, 11:09 | |
|
Создание динамической библиотеки для GUI Создание библиотеки для Oracle, которая будет передавать запрос в БД MySQL Вызов функции одной динамической библиотеки из другой динамической библиотеки Создание динамической библиотеки сортировок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|