Libzdb在solaris上实战问题记录

libzdb编译学习

下载安装包之后,按照经典三步骤方法./configure、gmake、gmake install,很显然,没有那么简单,果然,第一个步骤就出问题啦。

./configure

    在一台安装过oracle10g数据库的服务器上执行configure命令之后,终端显示没有使能oracle数据库,进一步查看信息,发现没有找到连接oracle数据库需要使用的oci的动态链接库。到此为止线索暂时中断,不知道原因是为什么。但是通过查看包文件下面的configure.log文件,找到了问题的详细原因(可以说做得很好了,日志文件把生成makefile文件获取的系统环境变量、出错的信息全部给出,方便查找)。以下错误至少给出两点信息,出错的动态链接库是libclntsh.so,出错的原因为动态链接库位数与系统不一致。

       关于错误ELFCLASS64,网上的说法是说在64位的solaris系统(查看unix系统的位数可以用命令isainfo -b  或者 -v)中,默认编译是按照32位来进行编译动态链接库,而这个地方libzdb动态库的编译依赖于/export/home/oracle/product/lib下的libclntsh.so,这个是64位的(系统安装的是64位的oracle,区分方法是lib库文件夹分为lib和lib32)。知道了这个原因,因此解决方法就出来了!

       方法一、这是网上大部分说的方法,既然我们需要的是32位的动态链接库,那么我们就通过修改profile文件把oracle的LD_LIBRARY_PATH更改为lib32文件夹。     

        此时执行./configure命令,oralce被正确使能。接下来执行gmake、gmake install既可以编译出能够用于链接oracle数据库的动态库。

  •        ===================================这是分割线=================================================

      

 

 

        然而事情没有这么简单,用网络上的数据库线程池实例进行调试,执行文件程序直接dump掉,并且总是挂在初始化服务器句柄的地方,一开始总是怀疑是数据库的连接字符串传入的有问题。

       通过gdb调试得到的信息发现,挂的都在oracle本身的动态链接库libclntsh中,也就是上面出问题的地方。隐约感觉到时刚才解决configure问题时候留下的坑。

       方法二、

       考虑原来的程序使用lib中的64位动态链接库oci连接数据库能够正常,因此考虑可能还是要使用64位的动态链接库,于是如何解决configure问题再次摆出来。

       之前编译libcryptopp动态链接库的时候,也是出现动态链接库位数的问题,当时是通过 增加命令的方式来强制使用64位的方式编译。查了一下,果然有命令(也和profile文件中设置强制64位编译的命令相似QMAKESPEC=$QTDIR/mkspecs/solaris-g++-64)

./configure CCFLAGS="-m64" CPPFLAGS="-m64 " CXXFLAGS="-m64" CFLAGS="-m64"

(更新,在solaris上使用cmake编译opencv之前,指定系统按照64位编译的方法如下)

 export CFLAGS="-march=x86-64"

使用此命令,同样configure能正常通过,oracle也被正确使能。在g++自己的程序时候同样也要添加强制64位编译方式的命令:

g++ main.cpp -I /usr/local/include/zdb/ -o main -lzdb -m64

至此,libzdb的使用实例算是跑起来了,贴一张成功的图片:

数据库连接池中数量为5,使用了一个连接实例,下面为查询的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值