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,成功!!!

libclntsh.soOracle数据的客户端共享文件。它是Oracle数据客户端安装的一部分,用于提供与Oracle数据服务器进行通信的功能。libclntsh.so包含了一系列函数和符号,可以提供对Oracle数据各种操作的支持。 libclntsh.so的主要功能包括: 1. 提供连接数据的功能:libclntsh.so可以创建一个与Oracle数据服务器的连接,通过该连接可以执行SQL语句、获取数据中的数据等操作。 2. 执行SQL语句:使用libclntsh.so,可以发送SQL语句到Oracle数据服务器,并接收执行结果。这些SQL语句可以包括查询、插入、更新等操作。 3. 提供数据事务的支持:libclntsh.so可以管理和控制数据事务,包括事务的开始、提交和回滚等操作。 4. 提供与数据元数据的交互:libclntsh.so可以通过元数据操作对数据中的表、视图、索引等对象进行创建、修改和删除等操作。 5. 支持数据存储过程和触发器:libclntsh.so可以调用数据中存储的过程和触发器,实现对数据的自定义操作和触发逻辑。 6. 提供数据类型转换和处理:libclntsh.so可以将应用程序中的数据类型转换为与Oracle数据匹配的数据类型,并处理数据的输入和输出。 总之,libclntsh.soOracle数据客户端的核心文件,提供了与Oracle数据服务器进行通信和操作的功能。它是开发Oracle数据应用程序的重要组成部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值