• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            不會(huì)飛的鳥(niǎo)

            2010年12月10日 ... 不鳥(niǎo)他們?。?! 我要用自己開(kāi)發(fā)的分布式文件系統(tǒng)、分布式調(diào)度系統(tǒng)、分布式檢索系統(tǒng), 做自己的搜索引擎!??!大魚(yú)有大志?。?! ---楊書童

            [轉(zhuǎn)]Linux下g++編譯C++連接oracle(OCCI)出現(xiàn)的問(wèn)題及解決方式

            由于項(xiàng)目原因,開(kāi)始學(xué)習(xí)C++,剛接觸半個(gè)多月,今天參考網(wǎng)上例子,寫了個(gè)簡(jiǎn)單的C++連接ORACLE的DEMO,可是使用g++編譯時(shí)不順利,不是報(bào)這個(gè)錯(cuò)就是那個(gè),最后參考網(wǎng)上的解決方式和個(gè)人理解,終于調(diào)試好了,現(xiàn)把編譯中出現(xiàn)的問(wèn)題和解決方法總結(jié)出來(lái)。 

              源代碼 
             
            C++代碼
            1. #include <iostream>  
            2. #include <string>  
            3. #include "occi.h"  
            4. using namespace oracle::occi;  
            5. using namespace std;  
            6.   
            7. int main()  
            8. {  
            9.         string usr="sys";  
            10.         string pwd="orcl";  
            11.         string SID="ORCL";  
            12.         string date;  
            13.   
            14.         Environment *env=Environment::createEnvironment(Environment::OBJECT);  
            15.         Connection *conn= env->createConnection(usr,pwd,SID);//all strings  
            16.         if(conn)  
            17.                 cout<<"success createConnection!"<<endl;  
            18.         else  
            19.                 cout<<"failure createConnection!"<<endl;  
            20.   
            21.         Statement *stmt = conn->createStatement();  
            22.         string sSQL = "select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual";  
            23.         stmt->setSQL(sSQL);  
            24.   
            25.   
            26.         ResultSet *rs = stmt->executeQuery();  
            27.         if(rs->next())  
            28.         {  
            29.                 date = rs->getString(1);  
            30.         }  
            31.   
            32.         cout<<"now time :"<<date<<endl;  
            33.   
            34.         env->terminateConnection(conn);  
            35.         Environment::terminateEnvironment(env);  
            36.   
            37.         return 0;  
            38. }  
            39.     
            1. #include <iostream>  
            2. #include <string>  
            3. #include "occi.h"  
            4. using namespace oracle::occi;  
            5. using namespace std;  
            6.   
            7. int main()  
            8. {  
            9.         string usr="sys";  
            10.         string pwd="orcl";  
            11.         string SID="ORCL";  
            12.         string date;  
            13.   
            14.         Environment *env=Environment::createEnvironment(Environment::OBJECT);  
            15.         Connection *conn= env->createConnection(usr,pwd,SID);//all strings  
            16.         if(conn)  
            17.                 cout<<"success createConnection!"<<endl;  
            18.         else  
            19.                 cout<<"failure createConnection!"<<endl;  
            20.   
            21.         Statement *stmt = conn->createStatement();  
            22.         string sSQL = "select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual";  
            23.         stmt->setSQL(sSQL);  
            24.   
            25.   
            26.         ResultSet *rs = stmt->executeQuery();  
            27.         if(rs->next())  
            28.         {  
            29.                 date = rs->getString(1);  
            30.         }  
            31.   
            32.         cout<<"now time :"<<date<<endl;  
            33.   
            34.         env->terminateConnection(conn);  
            35.         Environment::terminateEnvironment(env);  
            36.   
            37.         return 0;  
            38. }  
            39.     


              本人linux上安裝oracle路徑:/opt/app/oracle/product/10.2.0/db_1 

              編譯命令:g++ -o conn -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -g 

            問(wèn)題一:編譯時(shí)報(bào)如下錯(cuò)誤: 
                
            Shell代碼
            1.       [oracle@localhost demo]$ g++ g++ -o conn -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib -lclntsh -locci /usr/lib/libstdc++.so.5 conn_db.cpp -g  
            2. g++: g++: No such file or directory  
            3. conn_db.cpp:3:18: error: occi.h: No such file or directory  
            4. conn_db.cpp:4: error: 'oracle' has not been declared  
            5. conn_db.cpp:4: error: 'occi' is not a namespace-name  
            6. conn_db.cpp:4: error: expected namespace-name before ';' token  
            7. conn_db.cpp: In function 'int main()':  
            8. conn_db.cpp:14: error: 'Environment' was not declared in this scope  
            9. conn_db.cpp:14: error: 'env' was not declared in this scope  
            10. conn_db.cpp:14: error: 'Environment' is not a class or namespace  
            11. conn_db.cpp:14: error: 'Environment' is not a class or namespace  
            12. conn_db.cpp:15: error: 'Connection' was not declared in this scope  
            13. conn_db.cpp:15: error: 'conn' was not declared in this scope  
            14. conn_db.cpp:21: error: 'Statement' was not declared in this scope  
            15. conn_db.cpp:21: error: 'stmt' was not declared in this scope  
            16. conn_db.cpp:26: error: 'ResultSet' was not declared in this scope  
            17. conn_db.cpp:26: error: 'rs' was not declared in this scope  
            18. conn_db.cpp:35: error: 'Environment' is not a class or namespace  
            19.        

               
                解決:編譯時(shí)沒(méi)有引入OCCI頭文件,如果沒(méi)有,先下載對(duì)應(yīng)的 ORACLE client安裝,比如我的是oracle10g,下載了oracle-instantclient-basic- 10.2.0.4-1.i386.zip,解壓到一個(gè)目錄下(/home/oracle/oracle/include),然后在編譯文件的時(shí)候引進(jìn)這個(gè)解壓目錄 

               編譯命令增加OCCI目錄:g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -g 


            問(wèn)題2:找不到對(duì)應(yīng)函數(shù) 
             
            Shell代碼
            1.    [oracle@localhost demo]$ g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -Wall -O -g  
            2. /tmp/cclFs9xq.o: In function `main':  
            3. /home/oracle/oracle/demo/conn_db.cpp:14: undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned int), void* (*)(void*, void*, unsigned int), void (*)(void*, void*))'  
            4. /home/oracle/oracle/demo/conn_db.cpp:35: undefined reference to `oracle::occi::Environment::terminateEnvironment(oracle::occi::Environment*)'  
            5. collect2: ld returned 1 exit status   
            6.    

            解決:增加libocci.so和libclntsh.so指定編譯 
              
              修改后的編譯命令: g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -lclntsh -locci -Wall -O -g 

              另外可能在引入-lclntsh -locci編譯時(shí)可能會(huì)報(bào)找不到以下錯(cuò)誤: 
                
            Shell代碼
            1.      [oracle@localhost demo]$ g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -lclntsh -locci /usr/lib/libstdc++.so.5 -Wall -O -g  
            2. /usr/bin/ld: cannot find -lclntsh  
            3. collect2: ld returned 1 exit status  
            4. [oracle@localhost demo]$   
            5.        

                 解決:這是因?yàn)闆](méi)有找到libclntsh.so和libocci.so鏈接庫(kù),你在可以把oracle client安裝目錄下把這兩個(gè)文件拷貝到$ORACLE_HOME/lib目錄下,或加到/usr/lib目錄下就可以了 

            問(wèn)題三:occi在linux編譯運(yùn)行時(shí)報(bào)libstdc++.so.6沖突的問(wèn)題 
               
            Java代碼
            1. [oracle@localhost demo]$ g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -lclntsh -locci -Wall -O -g  
            2. /usr/bin/ld: warning: libstdc++.so.5, needed by /opt/app/oracle/product/10.2.0/db_1/lib/libocci.so, may conflict with libstdc++.so.6  
            1. [oracle@localhost demo]$ g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -lclntsh -locci -Wall -O -g  
            2. /usr/bin/ld: warning: libstdc++.so.5, needed by /opt/app/oracle/product/10.2.0/db_1/lib/libocci.so, may conflict with libstdc++.so.6  

              解決:OCCI庫(kù)在linux編譯的時(shí)候,由于linux版本太高,會(huì)提示以上情況,實(shí)際上,在大多數(shù)linux系統(tǒng)上,還保留有l(wèi)ibstdc++5的庫(kù),自己手工在編譯的時(shí)候加上去就好了 

              修改后的編譯命令:g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib -lclntsh -locci /usr/lib/libstdc++.so.5 conn_db.cpp -g 

              編譯通過(guò)后執(zhí)行結(jié)果輸出: 
              
            Shell代碼
            1. [oracle@localhost demo]$ g++ -o conn -I/home/oracle/oracle/include -L/opt/app/oracle/product/10.2.0/db_1/lib -L/opt/oracle/product/10.2.0/db_1/rdbms/lib conn_db.cpp -lclntsh -locci /usr/lib/libstdc++.so.5 -Wall -O -g  
            2. [oracle@localhost demo]$ ./conn  
            3. success createConnection!  
            4. now time :2010-11-14 22:49:24  
            5. [oracle@localhost demo]$  


            posted on 2014-12-18 13:04 不會(huì)飛的鳥(niǎo) 閱讀(866) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久久久国产一级毛片高清板| 91精品国产色综久久| 欧美性猛交xxxx免费看久久久| 亚洲精品NV久久久久久久久久| 久久人人爽人人爽人人片av高请| 久久久久国产精品三级网| 久久精品aⅴ无码中文字字幕不卡| 93精91精品国产综合久久香蕉| 久久综合给合久久狠狠狠97色| 少妇久久久久久被弄到高潮 | 91精品国产91久久| 久久亚洲2019中文字幕| 亚洲?V乱码久久精品蜜桃| 欧美久久一区二区三区| 久久久久国产精品麻豆AR影院| 久久国产精品一区| 一本久久a久久精品综合香蕉| 超级碰碰碰碰97久久久久| 91精品国产高清久久久久久io| 99久久er这里只有精品18| 国产精品综合久久第一页| 久久久久久久久66精品片| 久久99久国产麻精品66| 国产精品久久久99| 久久亚洲精品成人AV| 久久精品无码一区二区三区日韩 | 97久久国产亚洲精品超碰热| 久久国产成人| 亚洲综合精品香蕉久久网97| 国产69精品久久久久APP下载 | 欧美777精品久久久久网| 久久精品中文字幕一区| 久久亚洲国产成人精品无码区| 久久精品国产亚洲AV无码麻豆| 热99RE久久精品这里都是精品免费| 99久久精品国产免看国产一区| 亚洲va久久久噜噜噜久久天堂| 波多野结衣AV无码久久一区| 欧美日韩精品久久久免费观看| 精品久久久无码中文字幕| 久久综合久久综合久久|