OCI Oracle Call Interface
OCI Oracle Call Interface
Есть такая вот програмка, которая просто должна приконектиться к 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
//---------------------------------------------------------------------------------------------------------------------------------------
выдаёт
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
//---------------------------------------------------------------------------------------------------------------------------------------
Да она инклудится, но после этих трёх
#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
Хотя вроде переменные окружения я ей прописал...
#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
Хотя вроде переменные окружения я ей прописал...
> -loci ?
Прикольно вышло, если не знать что это деректива линковщику
"ЛОСИ ?"
> Да она инклудится, но после этих трёх
Она не может инклудиться, это же либо, она линкуется.
А вообщето я всегда инклужу <oci.h>
Интересно бы знать как эта технология ведет себя по линуксом, я ее под винду использую так было очень много проблем.
Например, если в цикле запускать потоки а в потоках делать OCIHandleAlloc
а затем OCIHandleFree, например для OCIStmt, так через некоторое время все вылетает, в Call Stack показывает что ошибка прозошла где то глубоко в Oracle. Так что пришлось выносить создание дескрипторов в самое начало.
Прикольно вышло, если не знать что это деректива линковщику
"ЛОСИ ?"
> Да она инклудится, но после этих трёх
Она не может инклудиться, это же либо, она линкуется.
А вообщето я всегда инклужу <oci.h>
Интересно бы знать как эта технология ведет себя по линуксом, я ее под винду использую так было очень много проблем.
Например, если в цикле запускать потоки а в потоках делать OCIHandleAlloc
а затем OCIHandleFree, например для OCIStmt, так через некоторое время все вылетает, в Call Stack показывает что ошибка прозошла где то глубоко в Oracle. Так что пришлось выносить создание дескрипторов в самое начало.