问题描述:
命令行编译完成后,运行程序,报错如下
================================================================
$
$ proc code=cpp sqlcheck=semantics dbms=V8 include=/oracle/app/product/9.2.0/precomp/public include=/usr/include include=. include=/include userid=test/test@test iname=test.pcPro*C/C++: Release 9.2.0.5.0 - Production on Wed Apr 26 18:22:04 2006Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.System default option values taken from: /oracle/app/product/9.2.0/precomp/admin/pcscfg.cfg$ xlC -+ -o test.e test.c -I/oracle/app/product/9.2.0/precomp/public -I/usr/include -I/include -I/include -I. -L/oracle/app/product/9.2.0/lib32 -lcurses -lclntsh -L/usr/lib -lpapi
$
$ test.e
exec(): 0509-036 Cannot load program test.e because of the following errors:
0509-150 Dependent module /oracle/app/product/9.2.0/lib/libclntsh.a(shr.o) could not be loaded.
0509-103 The module has an invalid magic number.
$
================================================================
看不行,我就用make编译,运行如下:
================================================================$ make all
xlC -+ -o test.o -c test.c -I/oracle/app/product/9.2.0/precomp/public -I/usr/include -I/include -I/include -I. -L/oracle/app/product/9.2.0/lib32 -lcurses -lclntsh -L/usr/lib -lpapi
xlC -+ -o test test.o -I/oracle/app/product/9.2.0/precomp/public -I/usr/include -I/include -I/include -I. -L/oracle/app/product/9.2.0/lib32 -lcurses -lclntsh -L/usr/lib -lpapi
Target "all" is up to date.
$ test
$
(运行程序以后,和刚才的结果不一样,没有任何反应,没有任何返回,也不报错)
================================================================
命令行编译完成后,运行程序,报错如下
================================================================
$
$ proc code=cpp sqlcheck=semantics dbms=V8 include=/oracle/app/product/9.2.0/precomp/public include=/usr/include include=. include=/include userid=test/test@test iname=test.pcPro*C/C++: Release 9.2.0.5.0 - Production on Wed Apr 26 18:22:04 2006Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.System default option values taken from: /oracle/app/product/9.2.0/precomp/admin/pcscfg.cfg$ xlC -+ -o test.e test.c -I/oracle/app/product/9.2.0/precomp/public -I/usr/include -I/include -I/include -I. -L/oracle/app/product/9.2.0/lib32 -lcurses -lclntsh -L/usr/lib -lpapi
$
$ test.e
exec(): 0509-036 Cannot load program test.e because of the following errors:
0509-150 Dependent module /oracle/app/product/9.2.0/lib/libclntsh.a(shr.o) could not be loaded.
0509-103 The module has an invalid magic number.
$
================================================================
看不行,我就用make编译,运行如下:
================================================================$ make all
xlC -+ -o test.o -c test.c -I/oracle/app/product/9.2.0/precomp/public -I/usr/include -I/include -I/include -I. -L/oracle/app/product/9.2.0/lib32 -lcurses -lclntsh -L/usr/lib -lpapi
xlC -+ -o test test.o -I/oracle/app/product/9.2.0/precomp/public -I/usr/include -I/include -I/include -I. -L/oracle/app/product/9.2.0/lib32 -lcurses -lclntsh -L/usr/lib -lpapi
Target "all" is up to date.
$ test
$
(运行程序以后,和刚才的结果不一样,没有任何反应,没有任何返回,也不报错)
================================================================
CC=xlCPROCFLAGS= code=cpp sqlcheck=semantics dbms=V8 userid=test/test@TESTORA_INCLUDE= include=$(ORACLE_HOME)/precomp/public include=/usr/include include=.INCLUDE= -I$(ORACLE_HOME)/precomp/public -I/usr/include -I$(AS_HOME)/include -I$(TUXDIR)/include -I.ORALIB= -L$(ORACLE_HOME)/lib32 -lcurses -lclntshAPPLIB= -L/usr/lib -lpapiPROC= procEXE= $(AS_HOME)/bin
all: test.o test.SUFFIXES: .pc .c.pc.c:
$(PROC) $(PROCFLAGS) $(ORA_INCLUDE) include=$(TUXDIR)/include iname=$*.pc
my:
$(PROC) $(PROCFLAGS) $(ORA_INCLUDE) include=$(TUXDIR)/include iname=test.pctest.o: test.c
$(CC) -+ -o test.o -c test.c $(INCLUDE) $(ORALIB) $(APPLIB)test: test.o
$(CC) -+ -o test test.o $(INCLUDE) $(ORALIB) $(APPLIB)install:
maketouch:
touch test.pc
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <time.h>
#include <sqlca.h>
#include <sqlcpr.h>EXEC SQL INCLUDE SQLCA;void fnWriteLog(char *strLogInfo)
{
time_t t;
struct tm *tb;
char strLogFile[80] = "\0"; /* 获得当前系统时间,以约定log 文件名 */
t = time(NULL);
tb = localtime(&t);
sprintf(strLogFile, "%04d%02d%02d", 1900+tb->tm_year, 1+tb->tm_mon, tb->tm_mday);
printf("%s %02d:%02d:%02d. %s\n",strLogFile,tb->tm_hour, tb->tm_min, tb->tm_sec, strLogInfo);
}
/****************************************************************/
#define CONNECT_DATABASE(x,y) { \
if(!x) \
{ \
while(1) \
{ \
if(fnConnectDatabase() == -1) \
{ \
if(y < 20) { y ++ ; continue ;} \
else { \
sprintf(errinfo, (char*)"Connect database retry [%d] times failed!", y) ; \
fnWriteLog(errinfo) ; \
exit(-1) ; \
} \
} \
else {x = 1 ; y = 0 ;break ;} ; \
} \
} \
}
#define DISCONNECT_DATABASE(x) { \
if(x) \
{ \
if(fnDisConnectDatabase() != -1) x = 0 ; \
} \
}
/****************************************************************/
int fnSqlHandle(long lSqlcode)
{
char sqlerr[100] = "\0"; if(lSqlcode < 0 && lSqlcode != -1405)
{
sprintf(sqlerr, "SQL ERROR ! sqlca.sqlcode is [%d]",lSqlcode) ;
fnWriteLog(sqlerr) ;
return (-1);
} if(lSqlcode == 1403 || lSqlcode == 100)
{
sprintf(sqlerr, "SQL ERROR ! sqlca.sqlcode is [%d]",lSqlcode) ;
fnWriteLog(sqlerr) ;
return (-2) ;
} return (0) ;
}int fnConnectDatabase()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR uid[20];
VARCHAR pwd[20];
VARCHAR svr[20];
EXEC SQL END DECLARE SECTION; memset(&uid,0,sizeof(uid));
memset(&pwd,0,sizeof(pwd));
memset(&svr,0,sizeof(svr)); strcpy ((char *)uid.arr,(char *)"test1"); uid.len = strlen((char *)uid.arr);
strcpy ((char *)pwd.arr,(char *)"test1"); pwd.len = strlen((char *)pwd.arr);
strcpy((char*)svr.arr,(char *)"TEST"); svr.len = strlen((char*)svr.arr); EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd USING :svr;
if(sqlca.sqlcode < 0) { fnWriteLog("Connet database failed!\n"); return (-1); }
return (0);
}int fnDisConnectDatabase()
{
EXEC SQL COMMIT WORK RELEASE ;
if(sqlca.sqlcode < 0) { fnWriteLog("DisConnet database failed!\n"); return (-1); }
return (0) ;
}
/****************************************************************/
int main(int arc,char *argv[])
{
printf("44444444444\n"); EXEC SQL BEGIN DECLARE SECTION ;
char checkmonth[7] = "\0";
char serialnumber[15] = "\0";
EXEC SQL VAR checkmonth IS STRING(7) ;
EXEC SQL VAR serialnumber IS STRING(15) ;
EXEC SQL END DECLARE SECTION ; int iRet = 0;
int connected = 0, retrytimes = 0 ;
char errinfo[500] = "\0";
int i=0;
printf("44444444444\n");
CONNECT_DATABASE(connected,retrytimes);
printf("555555555\n"); EXEC SQL DECLARE curUsrstate CURSOR for
SELECT serial_number
FROM TF_F_USER
WHERE update_time<sysdate;
printf("666666666\n");
iRet = fnSqlHandle(sqlca.sqlcode);
if( iRet < 0) { return iRet; } EXEC SQL OPEN curUsrstate ;
if(fnSqlHandle(sqlca.sqlcode) < 0) { return (-1) ; }
printf("77777777\n");
while(i++<100)
{
EXEC SQL FETCH curUsrstate INTO :serialnumber;
iRet = fnSqlHandle(sqlca.sqlcode);
if( iRet < 0) break;
printf("%s\n", serialnumber);
} EXEC SQL CLOSE curUsrstate ;
if(iRet == -1) { return iRet; }
DISCONNECT_DATABASE(connected);
exit;
}
$ ./test
exec(): 0509-036 Cannot load program test.e because of the following errors:
0509-150 Dependent module /oracle/app/product/9.2.0/lib/libclntsh.a(shr.o) could not be loaded.
0509-103 The module has an invalid magic number.