Страница 1 из 1

OCI Oracle Call Interface

Добавлено: 15 окт 2003, 17:57
Victor DeadMan
Есть такая вот програмка, которая просто должна приконектиться к Oracle, а потом отконектиться. Всё бы ничего, но на этапе линковке
выдаёт
undefined reference to `olog(cda_def *, unsigned char *, unsigned char *, int, unsigned char *, int, unsigned char *, int, unsigned int)'

Может кто знает, что ей не хватает. Два дня мучаюсь... всё бес толку.
Заранее спасибо.

#include <oratypes.h>
#include <ocidfn.h>
#include <ociapr.h>

cda_def *CDA;
Lda_Def *LDA;
ub1 *HDA;
int result = 1;

char *ora_name = "yankovskiy";
char *ora_pass = "deadman";
char *ora_host = "TCPA";

//---------------------------------------------------------------------------------------------------------------------------------------

int connect( void ){
CDA = new cda_def;
LDA = new Lda_Def;
HDA = new ub1[512];
memset( HDA, 0, 512 );

if( CDA == NULL || HDA == NULL || LDA == NULL ){ printf( "connect error..." ); return 1; }

setenv("TNS_ADMIN", "/u01/app/oracle/product/8.1.7/network/admin", 1 );
setenv("ORACLE_BASE", "/u01/app/oracle", 1 );
setenv("ORACLE_HOME", "/u01/app/oracle/product/8.1.7", 1 );
setenv("ORACLE_SID", "ORAW", 1 );
setenv("NLS_LANG", "american_america.CL8MSWIN1251", 1 );
setenv("NLS_NUMERIC_CHARACTERS", ". ", 1 );
setenv("LD_LIBRARY_PATH", "/u01/app/oracle/product/8.1.7/lib:/lib:/usr/lib:/u01/app/oracle/product/8.1.7/jdbc/lib:/u01/app/oracle/product/8.1.7/ctx/lib", 1 );

opinit( OCI_EV_TSF ); //Define Thread-safe envaronment
result = olog( LDA, HDA, (OraText *)ora_name, strlen( ora_name ),
(OraText *)ora_pass, strlen( ora_pass ),
0, -1, OCI_LM_DEF );
return result;
}//function
//---------------------------------------------------------------------------------------------------------------------------------------

int disconnect( void ){
if( CDA == NULL || HDA == NULL || LDA == NULL ){ printf( "disconnect error" ); return 1; }
if( result == 0 ) result = ologof( LDA );

delete LDA;
delete CDA;
delete HDA;

return result;
}//function
//---------------------------------------------------------------------------------------------------------------------------------------

Добавлено: 15 окт 2003, 18:08
mend0za
-loci ?

Добавлено: 15 окт 2003, 18:15
Victor DeadMan
Вопрос не очень понял. Видимо спрашивается используеься ли OCI. Да именно это. Конкретно функция olog

Добавлено: 15 окт 2003, 18:32
mend0za
eto ne utverjdenie, a kluch kompilyatora

pereformuliruju:
linkuetsja li biblioteka oci pri sborke programmy?

Добавлено: 15 окт 2003, 18:58
Victor DeadMan
Да она инклудится, но после этих трёх

#include <oratypes.h>
#include <ocidfn.h>
#include <ociapr.h>

теперь я поставил её первой и она скомпилила. Спасибо.

При выполнении из shell - срабатывает,
но при выполнении как CGI - ругается

t: error while loading shared libraries: libclntsh.so.8.0: cannot load shared object file: No such file or directory
[Wed Oct 15 19:55:43 2003] [error] [client 10.10.10.251] Premature end of script headers: /var/www/html/cgi-bin/t

Хотя вроде переменные окружения я ей прописал...

Добавлено: 15 окт 2003, 19:04
Victor DeadMan
Эта libclntsh.so.8.0
находится здесь /u01/app/oracle/product/8.1.7/lib/libclntsh.so.8.0
и должна находится по LD_LIBRARY_PATH

Добавлено: 28 ноя 2003, 14:04
Гость
> -loci ?
Прикольно вышло, если не знать что это деректива линковщику
"ЛОСИ ?" :D

> Да она инклудится, но после этих трёх
Она не может инклудиться, это же либо, она линкуется. :)

А вообщето я всегда инклужу <oci.h>
Интересно бы знать как эта технология ведет себя по линуксом, я ее под винду использую так было очень много проблем.
Например, если в цикле запускать потоки а в потоках делать OCIHandleAlloc
а затем OCIHandleFree, например для OCIStmt, так через некоторое время все вылетает, в Call Stack показывает что ошибка прозошла где то глубоко в Oracle. Так что пришлось выносить создание дескрипторов в самое начало.