藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


做過OCI程序的各位老哥,千萬要幫幫忙

在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+0x8848): undefined reference to `OCIDirPathStreamReset'
OraConnection.o(.text+0x8b94): undefined reference to `OCIDirPathFlushRow'



看起來是缺少某個庫文件,但我在編譯時已加入了-L/export/home/opt/oracle/8.1.6/lib -lclntsh
如果將Direct Path的調用去掉,則連接成功,請各位高手不吝賜教

做過OCI程序的各位老哥,千萬要幫幫忙

你提供的信息不全啊!!

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

做過OCI程序的各位老哥,千萬要幫幫忙

有沒有連接ORACLE自己的庫

做過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

做過OCI程序的各位老哥,千萬要幫幫忙

已經連接了(-lclntsh ),但還是報錯啊.

做過OCI程序的各位老哥,千萬要幫幫忙

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

做過OCI程序的各位老哥,千萬要幫幫忙

加上-lclient8就可以了!!試試看,我這裡可以。

做過OCI程序的各位老哥,千萬要幫幫忙

我加過 -lclient8 的,但也不行。我用的主機是Solaris5.8, 裝的是Oracle8.1.6, 庫文件的名字如下libclient8.a  libclntsh.so,不知道還有什麼問題


樓上這位大哥,請再幫我看一看

做過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後編譯時的錯誤信息。

做過OCI程序的各位老哥,千萬要幫幫忙

呵呵,搞定了。我把Oracle重啟了一遍就可以了,真奇怪
謝謝wangz等幾位大哥的幫忙



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com