文章目录
(一)修改相对路径
打开一个很久没有动的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,成功!!!