一開始在Oracle的bin目錄中調用proc會有很多錯誤,找不到庫,然後編譯錯誤等等。下面說一下我的環境配置過程:
1)設定動態庫路徑:
可以到etc/profile裡面加入,不過我是寫到~/.bashrc檔案裡的,加入下面的語句:
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib;
export LD_LIBRARY_PATH
重新開啟終端就可以了。
2)編譯問題有點多,我這裡唯寫我目前遇到的問題,和我的解決辦法
首先是編譯跳出N多屏長度的error,終端上捲軸托會頂部也顯示不完,最後只好編譯的時候$ORACLE_HOME/bin/proc file.pc | more
分屏顯示,看到有很多.h檔案找不到,在網上查資料,發現需要去配置如下檔案:
$ORACLE_HOME/precomp/admin/pcscfg.cfg
進去一看,include裡麵包含了很多redhat和suse的路徑,我這裡可是用的ubuntu喔,果斷把redhat和suse相關的路徑都刪除,但是這個時候我該寫什麼路徑了,看看剛才編譯的報錯,有一個叫stddef.h的檔案,這不是c的標準庫的定義檔案嘛,說明proc需要調用c語言的標準庫,這不就好辦了嘛,方法如下:
找標準庫的標頭檔路徑:
sudo find / -name "stddef.h"
我的搜尋結果如下:
/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h
/usr/lib/gcc/x86_64-linux-gnu/4.4/include/stddef.h
/usr/lib/syslinux/com32/include/bitsize/stddef.h
/usr/lib/syslinux/com32/include/stddef.h
/usr/src/linux-headers-3.5.0-17/include/linux/stddef.h
/usr/include/linux/stddef.h
第一個路徑就是我需要的,其他的應該不是喔。當然我沒有實驗過,但是gcc的肯定沒錯,所以我這裡使用第一個,將路徑寫道pcscfg.cfg檔案中去即可。
好了繼續編譯...
這次proc filename.pc檔案沒有問題,proc產生了.c的c語言源檔案,然後使用gcc filename.c -o main 又是錯誤,提示“致命錯誤:sqlca.h:沒有那個檔案或目錄”,所以我馬上使用find命令找到了這個檔案的路徑,然後gcc filename.c -I $ORACLE_HOME/precomp/public -o main依然錯誤,這次是login.c:(.text+0x1b9):對‘sqlcxt’未定義的引用,這一看應該還是沒有連結到庫檔案。最後查資料,果然還有庫檔案需要說明,最後成功通過編譯的完整命令如下:
gcc login.c -I $ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib -lclntsh -o main
最後執行main,成功運行...
好的這樣就完成了pro*c/c++的環境搭建了。過兩天再看看windows下的環境搭建,先寫到這裡。