Linux編譯C++項目找不到libclntsh.so庫

(一)修改相對路徑

打開一個很久沒有動的C++項目,還沒改代碼先執行了下make,報錯。
發現makefile裏面的路徑是絕對路徑,類似:

MAIN_PATH = /home/username/projects/xxx

將它修改爲當前項目路徑,基本上達到了相對路徑一個效果:

MAIN_PATH = $(shell pwd)

意思就是用shell裏面的當前路徑(項目路徑)。
之後就可以用$(MAIN_PATH)來定義路徑了。

(二)找不到libclntsh.so庫

2.1 現象

再打個make試試,結果報:

/usr/bin/ld: 找不到 -lclntsh

意思就是找不到clntsh這個庫,也就是libclntsh庫。
這是一個Oracle數據庫的庫文件。
看了下Oracle的安裝,發現libclntsh.so好好的就在$Oracle_Home/lib/下面。
而ORACLE_HOME=/usr/lib/oracle/11.2/client64

2.2 嘗試解決:LD_LIBRARY_PATH

檢查.bashrc
發現LD_LIBRARY_PATH有這個目錄。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle/11.2/client64/lib

2.3 嘗試解決:/etc/ld.so.conf.d/增加配置

進入/etc/ld.so.conf.d/,新建oracle.conf文件。
vim oracle.conf,加入如下內容:

/usr/lib/oracle/11.2/client64/lib

sudo運行ldconfig,結果報錯:

$ sudo ldconfig
$ ldconfig: /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 不是符號連接

於是把上面的oracle.conf修改了一下:

/usr/lib/oracle/11.2/client64/lib/libclntsh.so

再sudo運行ldconfig,結果成功。
但是……
再次make再次報同樣的錯,嘗試失敗。

2.4 嘗試解決:修改makefile

修改makefile,增加庫目錄/usr/lib/oracle/11.2/client64/lib/。
可能是語法不對吧,
再次make再次報同樣的錯,嘗試失敗。

2.5 嘗試解決:文件鏈接

既然怎麼都找不到Oracle的lib目錄……乾脆建一個文件鏈接。
進入$ORACLE_HOME/lib,確認文件名,然後:

sudo ln -sv /usr/lib/oracle/11.2/client64/lib/libclntsh.so /usr/lib/libclntsh.so

再次make,成功!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章