./bin/logServer: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or dir

本文记录了解决在CentOS环境下MySQL客户端库加载失败的问题过程。通过调整环境变量LD_LIBRARY_PATH,成功解决了执行文件因找不到libmysqlclient.so.16而无法启动的问题。

环境: ctenos

数据库: mysql 5.5

 

程序在编译成后, 运行执行文件报如下错误:

./bin/logServer: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory

 

查看系统相应的文件夹下面都有相应的库文件, 我就纳闷了, 编译能成功, 为啥不能执行呢? 在网上搜查了一下,使用软链接后:

[root@bogon var]# ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16

后, 仍然不能执行。

 

修改vi /etc/ld.so.conf文件下面添加如下一行代码

/usr/lib/mysql
运行ldconfig后仍然执行不了。

 

利用strace跟踪一下执行文件

[root@002_server]$
[root@002_server]$
[root@002_server]$strace -f ./bin/logServer
execve("./bin/logServer", ["./bin/logServer"], [/* 30 vars */]) = 0
brk(0)                                  = 0xbec6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b2f13019000
uname({sys="Linux", node="002_server", ...}) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=175710, ...}) = 0
mmap(NULL, 175710, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b2f1301a000
close(3)                                = 0
open("/lib64/tls/x86_64/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib64/tls/x86_64", 0x7fffb1509ff0) = -1 ENOENT (No such file or directory)
open("/lib64/tls/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib64/tls", 0x7fffb1509ff0)      = -1 ENOENT (No such file or directory)
open("/lib64/x86_64/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib64/x86_64", 0x7fffb1509ff0)   = -1 ENOENT (No such file or directory)
open("/lib64/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib64", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
open("/usr/lib64/tls/x86_64/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/tls/x86_64", 0x7fffb1509ff0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/tls/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/tls", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib64/x86_64/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/x86_64", 0x7fffb1509ff0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/libmysqlclient.so.16", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64", {st_mode=S_IFDIR|0755, st_size=102400, ...}) = 0
writev(2, [{"./bin/logServer", 15}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libmysqlclient.so.16", 20}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"/n", 1}], 10./bin/logServer: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
) = 135
exit_group(127)                         = ?

 

发现确实是libmysqlclient.so.16库文件找不到, 仔细想想, 编译能通过,为什么执行不了呢? 难道是环境变量的原因。。。

 

那就死马当作活马医吧。 执行如下命令:

[root@002_server]$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/services/mysql/lib/mysql/

 

再执行我的可执行文件:

[root@002_server]$./bin/logServer

[root@002_server]$ps -ef|grep logServer

root     25403 21884 99 20:45 pts/1    00:45:53 ./bin/logServer
501      27765 25407  0 21:31 pts/5    00:00:00 grep logServer


OK, 问题解决。

在启动某些依赖特定硬件或驱动的视觉(vision)程序时,如果系统提示 `error while loading shared libraries: libgxiapi.so: cannot open shared object file: No such file or directory`,这表明程序在运行时无法找到所需的共享库文件 `libgxiapi.so`。该文件通常是某些相机或图像采集设备的驱动库的一部分[^4]。 ### 原因分析 1. **缺少必要的库文件**:`libgxiapi.so` 未安装或未正确放置在系统的库搜索路径中。 2. **库路径未配置**:即使文件存在,若其所在目录未被加入到 `LD_LIBRARY_PATH` 或 `/etc/ld.so.conf` 中,系统也无法识别。 3. **架构不匹配**:尝试加载的库与当前系统架构不一致(例如 32 位 vs 64 位)。 4. **权限问题**:库文件可能没有正确的读取权限。 --- ### 解决方案 #### 1. 安装缺失的库文件 确认 `libgxiapi.so` 所属的软件包并进行安装。如果是第三方提供的库(如 Gige Vision 相机的 SDK),通常需要从供应商网站下载对应的 Linux 驱动或开发包,并按照说明进行安装。 ```bash # 示例:假设库属于某个已知包,可尝试使用 apt 搜索 sudo apt update sudo apt install libgxiapi-dev ``` 如果无法通过系统包管理器获取,应访问设备制造商的官网查找适用于 Linux 的 SDK 或库文件。 #### 2. 手动添加库路径 如果已将 `libgxiapi.so` 文件复制到本地系统但仍然报错,需确保其所在路径已被加入动态链接器缓存。 ```bash # 假设 libgxiapi.so 放在 /opt/gxiapi/lib/ export LD_LIBRARY_PATH=/opt/gxiapi/lib:$LD_LIBRARY_PATH # 或者永久生效 echo "/opt/gxiapi/lib" | sudo tee /etc/ld.so.conf.d/gxiapi.conf sudo ldconfig ``` #### 3. 检查库文件架构兼容性 使用以下命令检查 `libgxiapi.so` 是否与系统架构兼容: ```bash file /path/to/libgxiapi.so ``` 输出应显示与当前 CPU 架构匹配的信息(如 `ELF 64-bit LSB shared object` 表示 64 位库)。若不匹配,需下载对应架构版本的库文件。 #### 4. 设置文件权限 确保 `libgxiapi.so` 具有适当的读取权限: ```bash sudo chmod +r /opt/gxiapi/lib/libgxiapi.so ``` --- ### 验证是否解决 完成上述步骤后,重新运行 vision 程序并观察是否仍报错。也可以使用 `ldd` 命令验证程序对 `libgxiapi.so` 的依赖解析情况: ```bash ldd /path/to/vision_program | grep libgxiapi ``` 正常情况下应显示库文件的路径,而不是“not found”。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值