免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1980 | 回复: 9
打印 上一主题 下一主题

做过OCI程序的各位老哥,千万要帮帮忙 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-20 12:10 |只看该作者 |倒序浏览
在Solaris8下安装了oracle8.1.6,并编译用OCI编写的程序,其中使用了很多的oci函数,包括Direct Path API,但联接时,出现以下提示:
g++ -c  -I/export/home/opt/oracle/8.1.6/rdbms/demo -I/export/home/opt/oracle/8.p
g++ -g -o a.out test.o -L/export/home/opt/oracle/8.1.6/lib -lclntsh  -L/export/i
/export/home/gyq/zy/dbapi/lib/libdbapi.a(OraConnection.o): In function `ODB::Or:
OraConnection.o(.text+0x8704): undefined reference to `OCIDirPathColArrayReset'
OraConnection.o(.text+0x884: undefined reference to `OCIDirPathStreamReset'
OraConnection.o(.text+0x8b94): undefined reference to `OCIDirPathFlushRow'



看起来是缺少某个库文件,但我在编译时已加入了-L/export/home/opt/oracle/8.1.6/lib -lclntsh
如果将Direct Path的调用去掉,则连接成功,请各位高手不吝赐教

论坛徽章:
0
2 [报告]
发表于 2003-03-20 12:52 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

你提供的信息不全啊!!

可以将-lclntsh 放到g++ -g -o a.out test.o -L/export/home/opt/oracle/8.1.6/lib -lclntsh -L/export/i
的最后试一试。

论坛徽章:
0
3 [报告]
发表于 2003-03-20 13:14 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

有没有连接ORACLE自己的库

论坛徽章:
0
4 [报告]
发表于 2003-03-20 13:27 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

下面的应该挺清楚了吧,拜托这位大哥给瞧一瞧,执行结果不要管,关键是链接时不通过, 没有"OCIDirPathPrepare(dpctx, svchp_ctl, errhp_ctl);"这一句的话
就可以,但我急需使用Direct Path.


代码
####################
#include <sys/types.h>;
#include <sys/stat.h>;
#include <ctype.h>;
#include <fcntl.h>;
#include <assert.h>;
#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include <oratypes.h>;
#include <oci.h>;

int main(void)
{
OCIDirPathCtx      *dpctx;
OCISvcCtx          *svchp_ctl;
OCIError           *errhp_ctl;
            OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0,
                          (dvoid * (*)(dvoid *, size_t)) 0,
                          (dvoid * (*)(dvoid *, dvoid *, size_t))0,
                          (void (*)(dvoid *, dvoid *)) 0);
OCIDirPathPrepare(dpctx, svchp_ctl, errhp_ctl);
            return 0;
}
####################

g++ -c  -I/export/home/opt/oracle/8.1.6/rdbms/demo -I/export/home/opt/oracle/8.1.6/rdbms/public -I/export/home/opt/oracle/8.1.6/plsql/public -I/export/home/opt/oracle/8.1.6/network/public  test.cpp
g++ -g -o a.out test.o -L/export/home/opt/oracle/8.1.6/lib -L/export/home/opt/oracle/8.1.6/rdbms/lib -lclntsh  -lclntsh
test.o: In function `main':
test.o(.text+0x2c): undefined reference to `OCIDirPathPrepare'
collect2: ld returned 1 exit status
make: *** [a.out] Error 1

论坛徽章:
0
5 [报告]
发表于 2003-03-20 13:29 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

已经连接了(-lclntsh ),但还是报错啊.

论坛徽章:
0
6 [报告]
发表于 2003-03-20 16:21 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

OCIDirPathPrepare不在libclntsh.sl库中,我去找找。

论坛徽章:
0
7 [报告]
发表于 2003-03-20 16:39 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

加上-lclient8就可以了!!试试看,我这里可以。

论坛徽章:
0
8 [报告]
发表于 2003-03-21 09:38 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

我加过 -lclient8 的,但也不行。我用的主机是Solaris5.8, 装的是Oracle8.1.6, 库文件的名字如下libclient8.a  libclntsh.so,不知道还有什么问题


楼上这位大哥,请再帮我看一看

论坛徽章:
0
9 [报告]
发表于 2003-03-21 14:03 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

我这里没有你的环境,但OCIDirPathPrepare是标准的OCI函数,可以用nm命令查看一下。
nm libclient8.a |grep OCIDirPathPrepare


还可以把其它的库加上试试

-lcommon8
-lcore8
-lgeneric8
-lldapclnt8
-lmm
-ln8
-lnbeq8
-lncrypt8
-lnhost8
-lnl8
-lnldap8
-lnls8
-lnoname8
-lnoss8
-lnro8
-lnsslb8
-lntcp8
-lntcps8
-lntns8
-lnus8
-ltrace8
-lvsn8

顺便贴以下加上-lclient8后编译时的错误信息。

论坛徽章:
0
10 [报告]
发表于 2003-03-21 14:39 |只看该作者

做过OCI程序的各位老哥,千万要帮帮忙

呵呵,搞定了。我把Oracle重启了一遍就可以了,真奇怪
谢谢wangz等几位大哥的帮忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP