文章目錄
(一)修改相對路徑
打開一個很久沒有動的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,成功!!!