error while loading shared libraries: libaio.so.1

将oracle 10.2.0.4(32bit)从rhel5.6机器复制到rhel6.3机器后,sqlplus/rman等命令失败。经检查,libaio相关包存在问题,因oracle是32位,而lib64包用于64位软件。解决办法是重新检查安装oracle 10g所需包,最终问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景:

将oracle10.2.0.4 (32bit)从一台机器rhel5.6复制到另一台机器rhel6.3后,sqlplus/rman等命令都失败,错误信息如下:

[oracle@qht115 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Aug 30 12:41:06 2018

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

oracleorcl: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
ERROR:
ORA-12547: TNS:lost contact

 

检查一下libaio相关的包,如果libaio-devel没有有话先安装一下:

[root@localhost yum.repos.d]# rpm -aq | grep libaio
libaio-0.3.107-10.el6.x86_64
libaio-devel-0.3.107-10.el6.x86_64

查找一下libaio的位置,libaio.so.1存在于/u01/app/oracle/product/10201/lib/stubs以及/lib64之中

[root@localhost /]# find . -name libaio*
./u01/app/oracle/product/10201/lib/stubs/libaio.so.1
./u01/app/oracle/product/10201/lib/stubs/libaio.so
./u01/app/oracle/product/10201/lib/stubs/libaio-2.3.2-stub.so
./usr/include/libaio.h
./usr/share/doc/libaio-0.3.107
./usr/lib64/libaio.so
./usr/lib64/libaio.a
./lib64/libaio.so.1.0.0
./lib64/libaio.so.1
./lib64/libaio.so.1.0.1

/u01/app/oracle/product/10201/lib/stubs这个目录是临时的,所以忽略它,而lib64的所有包都是用在64位的软件中使用的,而我的oracle是32位的。

解决的方法是将oracle 10g所需要的包都重新检查安装一下:

 yum install -y glibc-2.12-1.107.el6.x86_64 glibc-devel-2.12-1.107.el6.i686 glibc-2.12-1.107.el6.i686 glibc-devel-2.12-1.107.el6.x86_64 glib2-2.22.5-7.el6.x86_64 glib2-devel-2.22.5-7.el6.x86_64 libaio-0.3.107-10.el6.x86_64 libaio-devel-0.3.107-10.el6.x86_64 libaio-devel-0.3.107-10.el6.i686 libaio-0.3.107-10.el6.i686 gcc-objc-4.4.7-3.el6.x86_64 gcc-gnat-4.4.7-3.el6.x86_64 gcc-objc++-4.4.7-3.el6.x86_64 gcc-4.4.7-3.el6.x86_64 gcc-java-4.4.7-3.el6.x86_64 gcc-gfortran-4.4.7-3.el6.x86_64 gcc-c++-4.4.7-3.el6.x86_64 libgcc-4.4.7-3.el6.x86_64 libgcc-4.4.7-3.el6.i686 compat-glibc-2.5-46.2.x86_64 compat-glibc-headers-2.5-46.2.x86_64 compat-gcc-34-3.4.6-19.el6.x86_64 compat-gcc-34-g77-3.4.6-19.el6.x86_64 compat-gcc-34-c++-3.4.6-19.el6.x86_64 compat-libstdc++-296-2.96-144.el6.i686 compat-libstdc++-33-3.2.3-69.el6.x86_64 compat-libstdc++-33-3.2.3-69.el6.i686 compat-gcc-34-g77-3.4.6-19.el6.x86_64 compat-gcc-34-3.4.6-19.el6.x86_64 compat-gcc-34-c++-3.4.6-19.el6.x86_64 compat-db-4.6.21-15.el6.i686 compat-db43-4.3.29-15.el6.x86_64 compat-db43-4.3.29-15.el6.i686 compat-db42-4.2.52-15.el6.i686 compat-db-4.6.21-15.el6.x86_64 compat-db42-4.2.52-15.el6.x86_64 libXp-devel-1.0.0-15.1.el6.i686 libXpm-3.5.10-2.el6.x86_64 libXpm-devel-3.5.10-2.el6.i686 libXp-1.0.0-15.1.el6.x86_64 libXpm-3.5.10-2.el6.i686 libXpm-devel-3.5.10-2.el6.x86_64 libXp-devel-1.0.0-15.1.el6.x86_64 libXp-1.0.0-15.1.el6.i686 libXt-1.1.3-1.el6.i686 openmotif-2.3.3-5.el6_3.x86_64 openmotif22-2.2.3-19.el6.x86_64 openmotif22-2.2.3-19.el6.i686 openmotif-devel-2.3.3-5.el6_3.x86_64 openmotif-devel-2.3.3-5.el6_3.i686 openmotif-2.3.3-5.el6_3.i686

执行完过后,/usr/lib下面就有了libaio.so.1了

[root@localhost /]# find . -name libaio*
./u01/app/oracle/product/10201/lib/stubs/libaio.so.1
./u01/app/oracle/product/10201/lib/stubs/libaio.so
./u01/app/oracle/product/10201/lib/stubs/libaio-2.3.2-stub.so
./lib/libaio.so.1.0.0
./lib/libaio.so.1
./lib/libaio.so.1.0.1
./usr/include/libaio.h
./usr/share/doc/libaio-0.3.107
./usr/lib/libaio.so
./usr/lib/libaio.a
./usr/lib64/libaio.so
./usr/lib64/libaio.a
./lib64/libaio.so.1.0.0
./lib64/libaio.so.1
./lib64/libaio.so.1.0.1

至此问题解决了:

[oracle@qht115 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Aug 30 13:52:20 2018

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

### Milvus 运行时缺少 `libaio.so.1` 共享库的解决方案 当遇到错误提示 `error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory`[^2] 时,这表明系统中缺失了名为 `libaio.so.1` 的共享库文件。此问题通常发生在 Linux 系统上运行依赖该库的应用程序(如 Milvus)时。 以下是解决问题的具体方法: #### 方法一:安装 `libaio` 库 在大多数基于 Debian 或 Ubuntu 的发行版中,可以通过以下命令来安装所需的库: ```bash sudo apt-get update && sudo apt-get install -y libaio1 ``` 对于基于 Red Hat 或 CentOS 的系统,则可以使用以下命令: ```bash sudo yum install -y libaio ``` 上述操作会自动下载并安装 `libaio` 及其关联的 `.so` 文件到系统的标准路径下,从而解决加载失败的问题。 #### 方法二:手动指定动态链接器路径 如果由于权限或其他原因无法通过包管理工具安装 `libaio`,也可以尝试手动设置环境变量 `LD_LIBRARY_PATH` 来指向已有的 `libaio.so.1` 文件位置。例如: ```bash export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH ``` 其中 `/path/to/lib` 是实际存储有 `libaio.so.1` 文件的目录地址。完成配置后重新启动 Milvus 即可验证效果。 #### 方法三:检查配置文件是否存在 虽然本问题是关于共享库丢失的情况,但如果同时存在其他异常状况,比如服务器配置文件不存在等问题也可能间接影响正常工作流程。因此建议确认是否有如下警告信息:“Config file not exist: /var/lib/milvus/conf/server_config.yaml”[^3] 并采取相应措施修复基础环境设定后再继续排查具体技术层面障碍。 --- ### 提供一段示例代码用于测试是否成功加载所需库 下面是一段简单的 C++ 测试代码用来检测当前环境中能否正确找到并载入目标共享对象(`libaio`)。 ```cpp #include <iostream> #include <dlfcn.h> int main() { void* handle = dlopen("libaio.so.1", RTLD_LAZY); if (!handle) { std::cerr << "Cannot load library: " << dlerror() << '\n'; return EXIT_FAILURE; } std::cout << "Library loaded successfully." << std::endl; dlclose(handle); return EXIT_SUCCESS; } ``` 编译执行以上脚本可以帮助快速判断之前提到的方法是否生效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值