程序是在 Windows 下面写的,编译通过了。但是在Linux下面不知道怎么编译,求高手帮忙!代码分成三个文件: main.cpp db_occi.h db_occi.cpp
这三个文件,前面的部分是这么写的:db_occi.h
//------------------------------------------------------------
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <assert.h>
#include <occi.h>
#include <occiCommon.h>
#include <occiData.h>
#include <occiObjects.h>
#include <occiAQ.h>
#include <occiControl.h>using namespace oracle::occi;class dbAccessor
{
略db_occi.cpp
//------------------------------------------------------------
#include "db_occi.h"using namespace std;
using namespace oracle::occi;dbAccessor::dbAccessor()
{
bConnected=false;
m_env=0;
m_conn=0;
m_stmt=0;
}
dbAccessor::~dbAccessor()
{
Disconn_DB();
}
略main.cpp
//------------------------------------------------------------
#include<string>
#include<string.h>
#include<stdlib.h>
#include<occi.h>
#include<occiCommon.h>
#include<occiData.h>
#include<occiObjects.h>
#include<occiAQ.h>
#include<occiControl.h>#include "db_occi.h"using namespace std;
using namespace oracle::occi;int main(void)
{
略我现在的makefile是这么写的(不太了解makefile的写法,瞎写的):
文件makefile
#************************************************************
ORACLE_INCLUDES=-I$(ORACLE_HOME)/rdbms/demo \
-I$(ORACLE_HOME)/rdbms/public \
-I$(ORACLE_HOME)/plsql/public \
-I$(ORACLE_HOME)/network/public \
-I$(ORACLE_HOME)/precomp/public
ORACLE_LIBS=-L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib
INC=$(ORACLE_INCLUDES)
LIB=$(ORACLE_LIBS) -lclntsh -loccis1:main.o db_occi.o
g++ $(INC) $(LIB) -o s1 main.o comm.o
main.o:main.cpp
g++ $(INC) $(ORACLE_LIBS) -c main.cpp
db_occi.o:db_occi.h db_occi.c
g++ $(INC) $(ORACLE_LIBS) -c db_occi.cclean:
rm s1 main.o db_occi.o但是执行 make 的时候报错:
make: *** No rule to make target `db_occi.c', needed by `db_occi.o'. Stop.求高手指点啊!^_^
这三个文件,前面的部分是这么写的:db_occi.h
//------------------------------------------------------------
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <assert.h>
#include <occi.h>
#include <occiCommon.h>
#include <occiData.h>
#include <occiObjects.h>
#include <occiAQ.h>
#include <occiControl.h>using namespace oracle::occi;class dbAccessor
{
略db_occi.cpp
//------------------------------------------------------------
#include "db_occi.h"using namespace std;
using namespace oracle::occi;dbAccessor::dbAccessor()
{
bConnected=false;
m_env=0;
m_conn=0;
m_stmt=0;
}
dbAccessor::~dbAccessor()
{
Disconn_DB();
}
略main.cpp
//------------------------------------------------------------
#include<string>
#include<string.h>
#include<stdlib.h>
#include<occi.h>
#include<occiCommon.h>
#include<occiData.h>
#include<occiObjects.h>
#include<occiAQ.h>
#include<occiControl.h>#include "db_occi.h"using namespace std;
using namespace oracle::occi;int main(void)
{
略我现在的makefile是这么写的(不太了解makefile的写法,瞎写的):
文件makefile
#************************************************************
ORACLE_INCLUDES=-I$(ORACLE_HOME)/rdbms/demo \
-I$(ORACLE_HOME)/rdbms/public \
-I$(ORACLE_HOME)/plsql/public \
-I$(ORACLE_HOME)/network/public \
-I$(ORACLE_HOME)/precomp/public
ORACLE_LIBS=-L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib
INC=$(ORACLE_INCLUDES)
LIB=$(ORACLE_LIBS) -lclntsh -loccis1:main.o db_occi.o
g++ $(INC) $(LIB) -o s1 main.o comm.o
main.o:main.cpp
g++ $(INC) $(ORACLE_LIBS) -c main.cpp
db_occi.o:db_occi.h db_occi.c
g++ $(INC) $(ORACLE_LIBS) -c db_occi.cclean:
rm s1 main.o db_occi.o但是执行 make 的时候报错:
make: *** No rule to make target `db_occi.c', needed by `db_occi.o'. Stop.求高手指点啊!^_^
只是还有个警告:
/usr/bin/ld: warning: libstdc++.so.5, needed by /oracle/product/10g/lib/libocci.so, may conflict with libstdc++.so.6然后,运行的时候,会有下面的错误:
./s1: error while loading shared libraries: libclntsh.so.10.1: cannot open shared object file: No such file or directory^_^
没有完好安装oracle client环境吧。
libclntsh.so.10.1,找找有没有这个库
libstdc++.so.5这个是必须的。
没有的话,基本上没戏。
有这个文件
libclntsh.so.10.1
这个文件也有
也在 /oracle/product/10g/lib 文件夹下怎么回事啊?^_^
然后,LD_LIBRARY_PATH设置好,自然就能找到libclntsh.so.10.1了。