問題:安裝完成sysbench之后,查看sysbench版本號時出現下面問題。這種報錯很常見,
[root@zero01 sysbench]# /usr/local/sysbench/bin/sysbench --version /usr/local/sysbench/bin/sysbench: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
分析:安裝了一個mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,這時需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存過后ldconfig一下,新的library才能在程序運行時被找到。
ldconfig命令的用途主要是在默認搜尋目錄/lib和/usr/lib以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態鏈接庫(格式如lib*.so*),進而創建出動態裝入程序(ld.so)所需的連接和緩存文件。緩存文件默認為/etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表,為了讓動態鏈接庫為系統所共享,需運行動態鏈接庫的管理命令ldconfig,此執行程序存放在/sbin目錄下。
ldconfig通常在系統啟動時運行,而當用戶安裝了一個新的動態鏈接庫時,就需要手工運行這個命令。
ldconfig幾個需要注意的地方:
1、往/lib和/usr/lib里面加東西,是不用修改/etc/ld.so.conf的,但是完了之后要調一下ldconfig,不然這個library會找不到。
2、在上面兩個目錄以外加東西的時候,一定要修改/etc/ld.so.conf,然后再調用ldconfig,不然也會找不到。比如安裝了一個mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面
3、如果想在這兩個目錄以外放lib,但是又不想在/etc/ld.so.conf中加東西(或者是沒有權限加東西)。那也可以,就是export一個全局變量LD_LIBRARY_PATH,然后運行程序的時候就會去這個目錄中找library。一般來講這只是一種臨時的解決方案,在沒有權限或臨時需要的時候使用。
4、ldconfig做的這些東西都與運行程序時有關,跟編譯時一點關系都沒有。編譯的時候還是該加-L就得加,不要混淆了。
5、總之,就是不管做了什么關於library的變動后,最好都ldconfig一下,不然會出現一些意想不到的結果。不會花太多的時間,但是會省很多的事。
6、再有,諸如libdb-4.3.so文件頭中是會含有庫名相關的信息的(即含“libdb-4.3.so”,可用strings命令查看),因此僅通過修改文件名以冒充某已被識別的庫(如libdb-4.8.so)是行不通的。為此可在編譯庫的Makefile中直接修改配置信息,指定特別的庫名。
解決方法:
1、查看動態鏈接庫中是否存在 libmysqlclient.so.20
[root@zero01 lib]# ldconfig -p| grep mysql libmysqlclient_r.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient_r.so.16 libmysqlclient.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.16
2、不存在創建軟連接並刷新動態鏈接庫
[root@zero01 lib]# ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib/ [root@zero01 lib]# ldconfig
3、這時再查看動態鏈接庫,會發現新創建的文件已在其中
[root@zero01 lib]# ldconfig -p | grep mysql libmysqlclient_r.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient_r.so.16 libmysqlclient.so.20 (libc6,x86-64) => /usr/lib/libmysqlclient.so.20 libmysqlclient.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.16
4、最后,再次運行,OK
[root@zero01 lib]# /usr/local/sysbench/bin/sysbench --version sysbench 1.0
