Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14

Создание динамической библиотеки для СУБД Oracle

02.02.2012, 12:44. Показов 7521. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
У Субд Оракл есть технология подключения сторонних программ (например на с или с++).
Подключаются они к базе в виде динамических библиотек (*.so).
Эта технология работает отлично до тех пор , пока подключаемая библиотека использует другие стандартные же библиотеки (которые находятся в /usr/lib или /usr/local/lib).
Но вдруг если в программе есть #include файлы совершенно с другой дериктории, а сами библиотеки находятся в другой, то в самой базе (после подключения данной библиотеки) возникают проблемы при обращении к функциям, определенным в этих include файлах и библиотеках.

Суть:
1) программа :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#ifdef _WIN32
#   include <windows.h>
#   include <wincrypt.h>
#else
#   include <string.h>
#   include <stdlib.h>
#   include <CSP_WinDef.h>
#   include <CSP_WinCrypt.h>
#endif
#include <WinCryptEx.h>
 
 
int Mysign(char *source)
{
 HCRYPTPROV   hCRYPTPROV  =  0;
 const BYTE * Pin = (BYTE*) "csp1";
 
 // initialize
 if (!CryptAcquireContext(&hCRYPTPROV,"promtraktor", NULL, PROV_GOST_2001_DH,CRYPT_SILENT))
 {
   // error 1
   return 1;
 }
 if (!CryptSetProvParam(hCRYPTPROV,PP_KEYEXCHANGE_PIN,Pin,NULL))
 {
   // error 2
   return 2;
 }
 // deinitialize
 if (hCRYPTPROV)
 {
   CryptReleaseContext(hCRYPTPROV, 0);
 }
 // success
 return 0;
}
2) make file писал не я (поэтому трудно разобраться):

.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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.02.2012, 12:44
Ответы с готовыми решениями:

Создание динамической библиотеки
есть makefile root_include_dir :=include root_source_dir:=src source_subdirs :=./cRand ./fft ./rs compile_flags :=-Wall -pipe ...

Сборка динамической библиотеки
Пытаюсь собрать динамическую библиотеку для использования её из питона. #include &lt;iostream&gt; #include &lt;string&gt; ...

Не видит содержимое динамической библиотеки
(clang, linux) Делаю так: 1. Компиляция объектов 2. Сборка в динамическу библиотеку 3. Расположение её в /usr/local/lib (чтобы не...

27
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.02.2012, 13:21
Цитата Сообщение от fluence Посмотреть сообщение
(при выполении вылетает ошибка что функции не определены)
покажи вывод.

Добавлено через 9 минут
что-то не понимаю...
функции CryptAcquireContext(), CryptSetProvParam(), CryptReleaseContext() - это WINAPI функции. как это ты пытаешься в лине собирать?

Up.
или их альтернативная реализация находится в:
# include <CSP_WinDef.h>
# include <CSP_WinCrypt.h>
?

дай ссылку на реализацию.
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 13:21  [ТС]
Скрин в PL/SQL Developere
Миниатюры
Создание динамической библиотеки для СУБД Oracle  
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.02.2012, 13:23
так это вендовый скрин. объясни, как это ты в лине решил собрать прогу использующую WINAPI? юзаешь кросс-компилятор?
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 13:26  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
покажи вывод.

Добавлено через 9 минут
что-то не понимаю...
функции CryptAcquireContext(), CryptSetProvParam(), CryptReleaseContext() - это WINAPI функции. как это ты пытаешься в лине собирать?
это прототипы виндовых функций. Они реализованы в библиотеке CAPILITE. Она подключается как раз с помощью -I -L
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.02.2012, 13:30
Цитата Сообщение от fluence Посмотреть сообщение
это прототипы виндовых функций. Они реализованы в библиотеке CAPILITE.
с этим понятно.

второй вопрос:
Цитата Сообщение от niXman Посмотреть сообщение
так это вендовый скрин. объясни, как это ты в лине решил собрать прогу использующую WINAPI? юзаешь кросс-компилятор?
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 13:37  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
дай ссылку на реализацию.
http://www.cryptopro.ru/docs/cpdn/default.asp - там все исходники

http://www.cryptopro.ru/faq/ka... pod-yuniks - необходимый пакеты для этого

Добавлено через 4 минуты
Цитата Сообщение от niXman Посмотреть сообщение
так это вендовый скрин. объясни, как это ты в лине решил собрать прогу использующую WINAPI? юзаешь кросс-компилятор?
Наш сервак БД стоит на линуксе. Скрин сделан на клиентской стороне (там установлена винда).
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.02.2012, 13:41
Цитата Сообщение от fluence Посмотреть сообщение
сервак БД стоит на линуксе. Скрин сделан на клиентской стороне (там установлена винда).
не понимаю...

т.е. ты собираешь .so которая юзается сервером на линуксе, так?
а ошибку ты можешь увидеть на стороне клиента, так?
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 13:42  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
не понимаю...

т.е. ты собираешь .so которая юзается сервером на линуксе, так?
а ошибку ты можешь увидеть на стороне клиента, так?
Все верно.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.02.2012, 13:52
так с...

1. CAPILITE ты собирал? покажи какие файлы установились, и как собирал/устанавливал.
2. приаттачь makefile полностью. тот что в топике.

будем думать..
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
02.02.2012, 14:02
Цитата Сообщение от fluence Посмотреть сообщение
gcc -shared -o *.so *.o
На выходе получим замещение первого попавшегося .so файла в этой директории. Так и было задумано?
Цитата Сообщение от fluence Посмотреть сообщение
Потом с помощью g++ и директивы подклчаемых библиотек (-L) создается исполняемый файл.
Строчная -L только указывает на путь, по которому лежат библиотеки, сами они подключаются через -lимя_файла_библиотеки , причём имя без приставки lib и расширения .so
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
02.02.2012, 14:26
мб статик сборка?
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 14:51  [ТС]
Собственно, установленные пакеты :

[redhat@localhost ~]$ cd /opt/cprocsp
[redhat@localhost cprocsp]$ ls
bin include lib sbin share src
[redhat@localhost cprocsp]$


В папке lib - все библиотеки криптоправайдера, папка include - инклуд файлы, src - там исходные cpp файлы

1) Содержимое include папок capilite и cpcsp (они основные) :

[redhat@localhost cprocsp]$ cd include
[redhat@localhost include]$ ls
asn1c capiextern.h common.h cppkcs11 fkc_version.h pkix reader
asn1data capilite cpcsp Crypt.h interfaces pkixcmp

[redhat@localhost include]$ ls capilite
ASN1Blob.h ASN1Traits.h ASN1Util.h CPCrypt.h EncodeAnd.h
ASN1Exceptions.h ASN1Types.h ChainUtil.h Date.h StoreUtil.h
[redhat@localhost include]$ ls cpcsp
callctx.h cryptmem.h CSP_Sspi.h KeyPairOpers.h stdafx.h
CheckHash.h CSPHandles.h cspvtable.h lfmm.h WinCryptEx.h
cmpmem.h CSPKernel.h CSP_WinBase.h platformstream.h wincspc.h
constant.h csp_lic.h CSP_WinCrypt.h serial_def.h wincsp.h
cpasn.h cspmm.h CSP_WinDef.h serial.h wincspx.h
CpSChl.h csp_rc.h CSP_WinError.h simple_hash.h winrmcsp.h
CpSSP.h CSP_SChannel.h dbtrace_initer.h SSPMap.h
[redhat@localhost include]$


Теперь об исходном файле для моей библиотеки:
Находится он

[redhat@localhost Mysign]$ cd /opt/cprocsp/src/doxygen/CSP/Mysign
[redhat@localhost Mysign]$ ls
Makefile.unix Makefile.unix~ Mysign.c~ Mysign.cpp Mysign.o Mysign.so
[redhat@localhost Mysign]$


Компиляция осуществляется путем:

cd /opt/cprocsp/src/doxygen/CSP
eval `../setenv.sh --64`; make -f Makefile.unix clean
eval `../setenv.sh --64`; make -f Makefile.unix


Содержимое файла setenv.sh :
#!/bin/sh
ARG=32
#case `isainfo -k` in
#i386|sparc) ARG=32;;
#amd64|sparcv9) ARG=64;;
#esac
case `uname -m` in
x86_64|amd64) ARG=64;;
esac
for i in $*
do
case $i in
--64) ARG=64;;
--32) ARG=32;;
--help|--usage) echo "Usage: setenv.sh options" >&2
echo "--32 - configure 32bit environbent" >&2
echo "--64 - configure 64bit environment" >&2
exit 1;;
esac
done
if test x$ARG = x64
then
libdir=/opt/cprocsp/lib/amd64
SIZEOF_VOID_P=8
else
libdir=/opt/cprocsp/lib/ia32
SIZEOF_VOID_P=4
fi

add_CPPFLAGS=
test -f /usr/include/stdint.h && \
add_CPPFLAGS="${add_CPPFLAGS} -DHAVE_STDINT_H"
test -f /usr/include/sys/inttypes.h && \
add_CPPFLAGS="${add_CPPFLAGS} -DHAVE_SYS_INTTYPES_H"

if test -z "$CXX" && test -z "$CCC";then
echo "No compiler specified... trying to guess" >&2
case `uname -s` in
# SunOS) case `isainfo -k` in
SunOS) case "XXX" in
#for stupid lsb checkers "XXX" (instead of isainfo -k)
amd64) COMPARCH=amd64
test $ARG = 64 && CSP_KERNEL_FLAGS="-DUSE_STD_MM -xmodel=kernel";;
sparcv9) COMPARCH=v9
CSP_KERNEL_FLAGS="-DUSE_STD_MM";;

esac
if test -f /opt/SUNWspro/bin/CC;then
echo "Studio is found">&2
CCC=/opt/SUNWspro/bin/CC
elif type CC >/dev/null;then
echo "CC is in the path" >&2
CCC=CC
elif type g++ >/dev/null;then
echo "g++ is found">&2
CCC=g++
else
echo "No C++ found">&2
exit 1
fi
test x$ARG = x64 && case $CCC in
*CC) case `$CCC -V 2>&1|head -1|cut -d' ' -f4` in
5.9) echo "ARCH_FLAGS=\"-m64\";export ARCH_FLAGS;";;
*) echo "ARCH_FLAGS=\"-xarch=$COMPARCH\";export ARCH_FLAGS;";;
esac
test -n "$CSP_KERNEL_FLAGS" && echo "CSP_KERNEL_FLAGS=\"$CSP_KERNEL_FLAGS\"; export CSP_KERNEL_FLAGS;"
;;
*) CCC="$CCC -m64";;
esac
echo "CCC=\"$CCC\";export CCC;"
if test -f /opt/SUNWspro/bin/cc;then
echo "Studio is found">&2
CC=/opt/SUNWspro/bin/cc
elif type cc >/dev/null;then
echo "cc is in the path" >&2
CC=cc
elif type gcc >/dev/null;then
echo "gcc is found">&2
CC=gcc
else
echo "Nothing is found">&2
exit 1
fi
echo "CC=\"$CC\";export CC;" ;;

AIX)
if test x$ARG = x32;then
echo "CCC=/usr/vacpp/bin/xlC;export CCC;"
echo "CC=\"/usr/vac/bin/cc -qlanglvl=extc89 -qlanglvl=extc99\";export CC;"
else
echo "CCC=\"/usr/vacpp/bin/xlC -q64\";export CCC;"
echo "CC=\"/usr/vac/bin/cc -q64 -qlanglvl=extc89 -qlanglvl=extc99\";export CC;"
echo "OBJECT_MODE=64;export OBJECT_MODE;"
fi
;;
*) if type g++ >/dev/null;then
echo "g++ found in the path" >&2
if test `uname -m` = x86_64 && test x$ARG = x32
then
echo "CC=\"gcc -m32\";export CC;"
echo "CXX=\"g++ -m32\";export CXX;"
echo "ARCH_FLAGS=\"-m32\";export ARCH_FLAGS;"
else
echo "CC=\"gcc\";export CC;"
echo "CXX=\"g++\";export CXX;"
fi
if test x$ARG = x32
then
echo "LSB_LD=/lib/ld-lsb.so.3;export LSB_LD;"
else
echo "LSB_LD=/lib64/ld-lsb-x86-64.so.3;export LSB_LD;"
fi
else
echo "Nothing is found">&2
exit 1
fi;;
esac
fi
if test -z "$INSTALL"
then
if type install >/dev/null;then
INSTALL=install
else
INSTALL=cp
fi
fi
echo "CSP_DIR=/opt/cprocsp;"
echo "CSP_INCLUDE=/opt/cprocsp/include;"
echo "add_CPPFLAGS=\"$add_CPPFLAGS\";"
echo "SIZEOF_VOID_P=$SIZEOF_VOID_P;"
echo "CSP_LIB=$libdir;"
echo "INSTALL=$INSTALL;"
case `uname -s` in
SunOS)echo "CSP_EXTRA_LIBS=\"-R$libdir -lsocket -lnsl\";";;
FreeBSD)echo "CSP_EXTRA_LIBS=\"-R$libdir -lpthread\";";;
AIX)echo "CXXFLAGS=\"$CXXFLAGS -qlang=stdc99\";export CXXFLAGS"
echo "add_ldflags=\"-Wl,-brtl\";";;
*) echo "CSP_EXTRA_LIBS=\"-lpthread\";";;
esac
echo "export CSP_DIR CSP_INCLUDE CSP_LIB CSP_EXTRA_LIBS SIZEOF_VOID_P INSTALL add_ldflags add_CPPFLAGS;"


2) Содержимое файла Makefile.unix

DIRS= Mysign

all:
for d in $(DIRS); do ( cd $$d; $(MAKE) -f Makefile.unix ) || fail=yes; done;\
test -z "$$fail"
clean:
for d in $(DIRS); do ( cd $$d; $(MAKE) -f Makefile.unix clean) done

Третий этап компиляции я уже указал в самом начале...

Я знаю - это тупо, я пробовал все библиотеки и инклуд файлы запихать в /usr/local
Но в таком случае программа не компилируеется.


Добавлено через 9 минут
На мой запрос Криптоправайдер сказал, что нужно при создании объектного файла подключать библиотеки.
Это что-то похожее вида

gcc -shared -fPIC -o Mycrypt.so Mycrypt.o -L/opt/cprocsp/lib -lcapi10 -lcapi20

???
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
02.02.2012, 14:54
А у вас без посредничества оракла все работает ?
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 14:56  [ТС]
Цитата Сообщение от KuKu Посмотреть сообщение
А у вас без посредничества оракла все работает ?
Да.....
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.02.2012, 14:58
Цитата Сообщение от fluence Посмотреть сообщение
На мой запрос Криптоправайдер сказал, что нужно при создании объектного файла подключать библиотеки.
Это что-то похожее вида
gcc -shared -fPIC -o Mycrypt.so Mycrypt.o -L/opt/cprocsp/lib -lcapi10 -lcapi20
???
да. но твоем списке файлов я только хидеры вижу. нет ни статических библиотек, ни динамических.
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 15:01  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
да. но твоем списке файлов я только хидеры вижу. нет ни статических библиотек, ни динамических.

[redhat@localhost lib]$ cd /opt/cprocsp/lib/amd64
[redhat@localhost amd64]$ ls
libasn1data.so libcpui.so.3.6.1 librdrrdr.so.3
libasn1data.so.3 libcsp.so librdrrdr.so.3.6.1
libasn1data.so.3.6.1 libcsp.so.3 librdrrndmbio_tui.so
libcapi10.so libcsp.so.3.6.1 librdrrndmbio_tui.so.3
libcapi10.so.3 libpkixcmp.so librdrrndmbio_tui.so.3.6.1
libcapi10.so.3.6.1 libpkixcmp.so.3 librdrrndm.so
libcapi20.so libpkixcmp.so.3.6.1 librdrrndm.so.3
libcapi20.so.3 librdrdsrf.so librdrrndm.so.3.6.1
libcapi20.so.3.6.1 librdrdsrf.so.3 librdrsup.so
libcpext.so librdrdsrf.so.3.6.1 librdrsup.so.3
libcpext.so.3 librdrfat12.so librdrsup.so.3.6.1
libcpext.so.3.6.1 librdrfat12.so.3 libssp.so
libcpui.so librdrfat12.so.3.6.1 libssp.so.3
libcpui.so.3 librdrrdr.so libssp.so.3.6.1
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
02.02.2012, 15:07
теперь сделай поиск по динамическим библиотекам на предмет экспорта той функции, которая на скрине.

как найдешь, добавь ее в список библиотек при собрке .so
>gcc -shared -fPIC -o Mycrypt.so Mycrypt.cpp -L/opt/cprocsp/lib -lcapi10 -lcapi20 -l???

потом покажи экспорт+импорт получившейся .so

Добавлено через 56 секунд
и покажи декларацию той функции что на скрине.
0
0 / 0 / 0
Регистрация: 20.01.2012
Сообщений: 14
02.02.2012, 15:39  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
теперь сделай поиск по динамическим библиотекам на предмет экспорта той функции, которая на скрине.

как найдешь, добавь ее в список библиотек при собрке .so
>gcc -shared -fPIC -o Mycrypt.so Mycrypt.cpp -L/opt/cprocsp/lib -lcapi10 -lcapi20 -l???

потом покажи экспорт+импорт получившейся .so

Добавлено через 56 секунд
и покажи декларацию той функции что на скрине.
[root@localhost local]# cd /opt/cprocsp/lib
[root@localhost lib]# ls
amd64 hashes ia32
[root@localhost lib]# cd amd64
[root@localhost amd64]# ls
libasn1data.so libcpui.so.3.6.1 librdrrdr.so.3
libasn1data.so.3 libcsp.so librdrrdr.so.3.6.1
libasn1data.so.3.6.1 libcsp.so.3 librdrrndmbio_tui.so
libcapi10.so libcsp.so.3.6.1 librdrrndmbio_tui.so.3
libcapi10.so.3 libpkixcmp.so librdrrndmbio_tui.so.3.6.1
libcapi10.so.3.6.1 libpkixcmp.so.3 librdrrndm.so
libcapi20.so libpkixcmp.so.3.6.1 librdrrndm.so.3
libcapi20.so.3 librdrdsrf.so librdrrndm.so.3.6.1
libcapi20.so.3.6.1 librdrdsrf.so.3 librdrsup.so
libcpext.so librdrdsrf.so.3.6.1 librdrsup.so.3
libcpext.so.3 librdrfat12.so librdrsup.so.3.6.1
libcpext.so.3.6.1 librdrfat12.so.3 libssp.so
libcpui.so librdrfat12.so.3.6.1 libssp.so.3
libcpui.so.3 librdrrdr.so libssp.so.3.6.1
[root@localhost amd64]# nm libcapi10*3.6.1
0000000000003700 T CryptAcquireContextA
0000000000003a80 T CryptAcquireContextW
0000000000005820 T CryptContextAddRef
0000000000004d00 T CryptCreateHash
0000000000004bd0 T CryptDecrypt
0000000000003e30 T CryptDeriveKey
0000000000005070 T CryptDestroyHash
0000000000003f80 T CryptDestroyKey
00000000000056c0 T CryptDuplicateHash
0000000000005560 T CryptDuplicateKey
0000000000004aa0 T CryptEncrypt
0000000000006670 T CryptEnumOIDInfo
000000000000c0f0 T CryptEnumProvidersA
00000000000069e0 T CryptEnumProviderTypesA
0000000000004800 T CryptExportKey
0000000000006710 T CryptFindOIDInfo
0000000000006ee0 T CryptFreeOIDFunctionAddress
0000000000003cf0 T CryptGenKey
0000000000004610 T CryptGenRandom
0000000000005900 T CryptGetDefaultProvider
0000000000004340 T CryptGetHashParam
0000000000004150 T CryptGetKeyParam
0000000000006f50 T CryptGetOIDFunctionAddress
00000000000035d0 T CryptGetProviderDll
0000000000004510 T CryptGetProvParam
00000000000046c0 T CryptGetUserKey
0000000000004e60 T CryptHashData
0000000000004f60 T CryptHashSessionKey
0000000000004930 T CryptImportKey
0000000000007dd0 T CryptInitOIDFunctionSet
0000000000005be0 T CryptRegisterOIDInfo
0000000000003c10 T CryptReleaseContext
0000000000004250 T CryptSetHashParam
0000000000004060 T CryptSetKeyParam
0000000000005a60 T CryptSetProviderEx
0000000000004440 T CryptSetProvParam
0000000000005260 T CryptSignHashA
0000000000005150 T CryptSignHashW
0000000000005470 T CryptVerifySignatureA
0000000000005340 T CryptVerifySignatureW
0000000000006860 T FormatMessage
000000000000c680 T GetLastError
000000000000c670 T SetLastError
[root@localhost amd64]#


Она уже подключена -lcapi10

Добавлено через 3 минуты
Цитата Сообщение от niXman Посмотреть сообщение
теперь сделай поиск по динамическим библиотекам на предмет экспорта той функции, которая на скрине.

как найдешь, добавь ее в список библиотек при собрке .so
>gcc -shared -fPIC -o Mycrypt.so Mycrypt.cpp -L/opt/cprocsp/lib -lcapi10 -lcapi20 -l???

потом покажи экспорт+импорт получившейся .so

Добавлено через 56 секунд
и покажи декларацию той функции что на скрине.
Я пробовал даже так:

[root@localhost Mysign]# gcc -shared -fPIC -o Mysign.so Mysign.cpp -L/opt/cprocsp/lib/amd64 -lcapi10 -lcapi20 -I/opt/cprocsp/include -I/opt/cprocsp/include/cpcsp -I/opt/cprocsp/include/asn1c/rtsrc -I/opt/cprocsp/include/asn1data
In file included from Mysign.cpp:11:
/opt/cprocsp/include/cpcsp/WinCryptEx.h:32:22: wincrypt.h: No such file or directory
In file included from Mysign.cpp:11:
/opt/cprocsp/include/cpcsp/WinCryptEx.h:1520: error: `__cdecl' does not name a type
/opt/cprocsp/include/cpcsp/WinCryptEx.h:1578: error: `__cdecl' does not name a type
/opt/cprocsp/include/cpcsp/WinCryptEx.h:1686: error: ISO C++ forbids declaration of `CPC_Kernel_Fpu_Begin_Callback' with no type
/opt/cprocsp/include/cpcsp/WinCryptEx.h:1686: error: expected `;' before '*' token
/opt/cprocsp/include/cpcsp/WinCryptEx.h:1694: error: ISO C++ forbids declaration of `CPC_Kernel_Fpu_End_Callback' with no type
/opt/cprocsp/include/cpcsp/WinCryptEx.h:1694: error: expected `;' before '*' token
Mysign.cpp: In function `int Mysign(char*)':
Mysign.cpp:25: warning: passing NULL used for non-pointer converting 4 of `BOOL CryptSetProvParam(HCRYPTPROV, DWORD, const BYTE*, DWORD)'
[root@localhost Mysign]#

Подключал библиотеки и инклуд дериктории так же как и в make файле...
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
02.02.2012, 15:52
А могут быть проблемы с правами того, от кого запускается оракл ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2012, 15:52
Помогаю со студенческими работами здесь

Ошибка преобразования при сборке динамической библиотеки
При сборке программы с динамической библиотекой позднего связывания вылазит ошибка: Пробовал как-нибудь преобразовать к одному типу, но не...

Создание динамической библиотеки для GUI
Доброй ночи, дорогие форумчане! Пишу Вам впервые, работаю с QT всего-ничего, так что не серчайте. Итак, есть некий проект, в котором...

Создание библиотеки для Oracle, которая будет передавать запрос в БД MySQL
Привет Всем!! Друзья подскажите пожалуйста. Передо мной стоит задача создать библиотеку для Oracle, которая будет передавать запрос в БД...

Вызов функции одной динамической библиотеки из другой динамической библиотеки
Добрый день! Помогите пожалуйста разобраться со следующим вопросом. Возможно ли из одной библиотеки передать параметры для...

Создание динамической библиотеки сортировок
Всем привет, дали задание создать динамическую библиотеку с сортировками bubble и Quick. Я делаю в компиляторе dev с++ dllmain.c ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru