1)
首先在oracle管网下载:
oracle-instantclient-basic-10.2.0.3-1.i386.rpm
oracle-instantclient-devel-10.2.0.3-1.i386.rpm
使用root用户进入linux,将上面的basic和devel放入在/root/oracle10g_package/oracle_occipk目录下
执行rpm –ivh * 进行安装,安装好的文件被生成到目录下:
/usr/lib/oracle/10.2.0.3/client/lib
存放库文件
其中libclntsh.so 是oracle提供给c语言调用的动态库
/usr/include/oracle/10.2.0.3/client 存放occi头文件
2)将/usr/include/oracle/10.2.0.3/client 存放occi头文件copy到/usr/include目录下
使用g++
编译时出现错误:
g++ -o conncl connclient.cpp -I/usr/include -L/usr/lib/oracle/10.2.0.3/client/lib
命令执行后出现
/tmp/cckQbf4h.o(.text+0x24e): In function `main'::undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned int), void* (*)(void*, void*, unsigned int), void (*)(void*, void*))'
/tmp/cckQbf4h.o(.text+0x743): In function `main':: undefined reference to`oracle::occi::Environment::terminateEnvironment(oracle::occi::Environment*)' /tmp/cckQbf4h.o(.gcc_except_table+0xa4): undefined reference to `typeinfo for oracle::occi::SQLException' collect2: ld returned 1 exit status
上面是找不到动态函数库,需要命令行参数中增加-lclntsh -locci
g++ -o conncl connclient.cpp -I/usr/include -L/usr/lib/oracle/10.2.0.3/client/lib -lclntsh -locci
执行语句再次编译,出现
/usr/bin/ld: warning: libstdc++.so.5, needed by /usr/lib/oracle/10.2.0.3/client/lib/libocci.so, may conflict with libstdc++.so.6
OCCI库在linux编译的时候,由于linux版本太高,会提示以上情况,实际上,在大多数linux
系统上,还保留有libstdc++5的库。
修改命令参数
g++ -o conncl connclient.cpp -I/usr/include -L/usr/lib/oracle/10.2.0.3/client/lib
-lclntsh -locci /usr/lib/libstdc++.so.5
编译通过。执行程序./conncl
创建3个软链接
ln -s libocci.so.11.1 libocci.so
ln -s libclntsh.so.11.1 libclntsh.so
ln -s libclntsh.so libclntsh.so.11.1
codeblock下配置
settings->compiler settings->search directories
compiler 存放include路径
linker 存放lib路径
settings->compiler settings->linker settings
other linker options 存放指定的库文件
Linux中error while loading shared libraries错误解决办法
1、打开/etc/ld.so.conf 文件
2、加入(动态)库文件所在的目录,例如我这里是 /usr/local/lib 目录
3、终端中运行下面的指令更新下配置文件
/sbin/ldconfig –v
经过以上三个步骤后,error while loading shared libraries的问题就解决了!