|
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
|
||||||
Создание динамической библиотеки для СУБД Oracle02.02.2012, 12:44. Показов 7525. Ответов 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 | |
|
Помогаю со студенческими работами здесь
28
Создание динамической библиотеки для GUI Создание библиотеки для Oracle, которая будет передавать запрос в БД MySQL Вызов функции одной динамической библиотеки из другой динамической библиотеки Создание динамической библиотеки сортировок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|