oracle sqlcxt函数崩溃,关于AIX 5L平台下gcc for AIX编译Oracle Pro*C/C++程

关于AIX 5L平台下gcc for AIX编译Oracle Pro*C/C++程序值得注意的几个问题

#################################################################################

Note1: AIX 5L下Oracle 9i/10g编译Pro*C/C++、OCI程序的时候有时候会找不到

$ORACLE_HOME/lib/libclntsh.so共享库的问题:

Question:

Why do I get error "[unixODBC][Easysoft][Oracle]Could not open

libclntsh.a

No such file or directory [ISQL]ERROR: Could not SQLConnect" on

AIX? Article : 00741

Last Reviewed : 14th February 2006

Revision : 1

Answer:

The libclntsh.a is an "archived" file which cannot be opened by

our driver. The way around

this is to "unarchive" this file and extract the shared object.

This can be done by changing

directory to $ORACLE_HOME/lib ($ORACLE_HOME/lib32 if you are not

using the 64-bit library)

and typing ar -xv libclntsh.a.

This will then generate a file called shr.o which will then need

to be renamed to libclntsh.so.

From this, the driver will be able to load the required shared

object.

Please then make sure that $ORACLE_HOME/lib (/lib32) is added to

your LIBPATH.

AIX 5L

$ cd $ORACLE_HOME/lib

$ ar -X32_64 -xv libclntsh.a

x - shr.o

$ mv shr.o libclntsh.so

$ cd $ORACLE_HOME/lib32

$ ar -xv libclntsh.a

x - shr.o

$ mv shr.o libclntsh.so

########################################################################################

Note2 :

AIX 5L下gcc编译Oracle Pro*C程序时,gcc for AIX

5L要加上-maix32或者-maix64的开关选项

CFLAGS = -maix32 #编译成32bit的目标文件

CFLAGS = -maix64 #编译成64bit的目标文件

########################################################################################

Note3 :

关于gcc的链接器如何使用静态库来解析引用,书上说命令行上的库和目标文件的顺序非常重要,如果在命令行中,

定义一个符号的库出现在引用这个符号的目标文件之前,那么引用就不能被解析,链接会失败。我查了一下gcc的

manual,也是这么说的:

(liboratest.a是包含了Pro*C/C++例程sqlcxt(),sqlglm()函数调用的静态库)

gcc -o -g -maix64 -L$ORACLE_HOME/lib -lclntsh -o test test.o

../../src/db/liboratest.a

出错: 报告:

.Undefined Symbol: '.sqlcxt'等等

改写为:

gcc -o -g -maix64 -o test test.o

../../src/db/liboratest.a -L$ORACLE_HOME/lib

-lclntsh

则链接OK

根据上面的描述,则:

如果需要编译链接的可执行文件同时使用liboratest.a静态库和链接$ORACLE_HOME/lib/libclntsh.so动态库,

则Makefile.am中宏定义如下:

e.g.:

bin_PROGRAM=test

test_LDADD=$(top_srcdir)/src/lib/libdes.a

$(top_srcdir)/src/db/liboratest.a

test_LDADD+=-L$(ORACLE_HOME)/lib -lclntsh

########################################################################################

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值