|
藍森林 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等幾位大哥的幫忙 |
| |