|
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
|
||||||
Создание динамической библиотеки для СУБД Oracle02.02.2012, 12:44. Показов 7646. Ответов 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 Вызов функции одной динамической библиотеки из другой динамической библиотеки Создание динамической библиотеки сортировок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов
• Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp
• Смежный проект:. . .
|
22. Подключение слоя системной динамики (потоковые диффуры): экономические метрики модели
anaschu 17.06.2026
Апдейт модели: финансовый контур, разделение затрат
Продолжаю развивать модель рабочего коллектива на AnyLogic. В этот раз работа шла над агентом Экономика — финансовым SD-слоем модели. Задача:. . .
|
[golang] Insert Delete GetRandom O(1) (Leetcode: 380)
alhaos 16.06.2026
Insert Delete GetRandom O(1)
Сложность: Medium
Источник: LeetCode 380
Задача
Реализовать структуру данных RandomizedSet, которая поддерживает следующие операции за O(1) в среднем:
|
Свет в конце тоннеля
kumehtar 16.06.2026
Поймал себя на одной мысли.
Раньше мне всегда казалось неправильным жить без чёткого понимания, куда всё идёт. Будто я иду по дороге судьбы, но не знаю, куда она ведёт. А раз не знаю — значит,. . .
|
|
[golang] Реализация стека с поддержкой получения минимального элемента за O(1)
alhaos 16.06.2026
Min Stack
Сложность: Medium
Источник: LeetCode 155
Задача:
Реализовать стек который поддерживает push, pop, top и получение минимального элемента за O(1).
Методы:
|
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача
Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
Сигнатура
func Fetch(urls string, maxConcurrent int) Result
Пример
urls :=. . .
|
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition)
Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
|
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
|