mysql+动态加载_MySql动态加载失败

环境: ctenos opensuse

数据库: 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, 问题解决。

另外如果出现 without updating pid file 类似这样的问题 可能是权限问题 不妨先看下对应目录的权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值